Какие языки программирования были разработаны с поддержкой Unicode с самого начала?

Какие широко используемые языки программирования были разработаны с нуля с поддержкой Unicode?

Многие языки программирования добавили поддержку Unicode как запоздалую мысль в более поздних версиях, но какие широко используемые языки были выпущены с поддержкой Unicode с первого дня?


comment
Конечно, многие из самых популярных и успешных языков программирования появились раньше, чем Unicode.   -  person Ned Deily    schedule 13.09.2009
comment
И (помимо python 3) большинство из них предшествовали расширению unicode выше 16 бит - и Java, и языки .net имеют поддержку UCS2 с методами обработки суррогатов, добавленными позже.   -  person Pete Kirkham    schedule 13.09.2009
comment
Просто любопытно, а почему вы спрашиваете?   -  person Roman    schedule 18.09.2009
comment
О какой версии Unicode вы говорите? Множество языков было разработано с поддержкой Unicode 1.0, но лишь немногие из них с самого первого дня поддерживали Unicode 4.0. Какие конкретные функции Unicode вас интересуют?   -  person Daniel Pryden    schedule 19.09.2009
comment
Роман: Чистый интерес к истории языка.   -  person knorv    schedule 20.09.2009
comment
Можно ли было бы определить синтаксис Haskell по-другому, если бы он был создан с учетом Unicode и многоязычия? .. Мне было интересно узнать у разумный ответ на то, что, хотя Haskell позволяет использовать идентификаторы Unicode, программировать на Haskell со всеми идентификаторами в вашем любимом человеческий язык, если язык написан в одном регистре (для него нет различий в верхнем и нижнем регистрах в Unicode), потому что Haskell предполагает, что для разных целей используются разные регистры в идентификаторах!   -  person imz -- Ivan Zakharyaschev    schedule 04.04.2011


Ответы (12)


Вероятно, Java была первым популярным языком, в котором впервые была реализована поддержка Unicode.

person Ken Keenan    schedule 12.09.2009
comment
Не считая того факта, что он поддерживает только базовую многоязычную плоскость (это было все, что было в Unicode, когда была изобретена Java). .NET framework - это первый язык, который я знаю, который разработан для полной поддержки юникода (включая правильную длину для строк, содержащих суррогаты ...) - person mihi; 13.09.2009
comment
Java всегда поддерживает полный стандарт Unicode, а не только BMP. Строки хранятся в UTF-16 (а не в UCS-2, что означает только BMP). - person Joachim Sauer; 13.09.2009
comment
Когда была разработана Java, Unicode был только BMP. Согласно документации MSDN по String в .Net - свойство Length возвращает количество объектов Char в этом экземпляре, а не количество символов Unicode. . Метод java.lang.String.codePointCount () возвращает количество кодовых точек в строке с учетом суррогатов. - person Pete Kirkham; 13.09.2009
comment
@ Joachim Sauer: UCS-2 поддерживает полный стандарт Unicode (не забудьте суррогатные пары от D800 до DBFF). Java была разработана для использования UTF-16, как и среда .Net, но Java была разработана до UTF-32 / UCS-4, а .NET была разработана после, но оба языка имеют доступ ко всему диапазону кодовых точек. - person Martin York; 21.09.2009
comment
@JoachimSauer: И все же все еще нет встроенных функций для перебора символов String. - person Mechanical snail; 19.08.2012

В основном все языки .NET являются языками Unicode, например C # и VB.NET.

person Jay Bazuzi    schedule 12.09.2009
comment
Действительно? Дай пять, Microsoft! Есть идеи, что IronRuby, IronPython и F # находятся в одной лодке? - person George Mauer; 13.09.2009
comment
Джордж, все языки .NET, использующие класс System.String, имеют полную поддержку Unicode. Я не знаю никаких языков .NET, которые не используют класс System.String, поэтому это означает, что IronRuby, IronPython и особенно F # (который является языком первого класса, начиная с VS2010) имеют встроенную поддержку Unicode. Я не могу придумать вескую причину, по которой кто-то мог бы создать язык .NET и сделать для него специальный строковый класс, отличный от Unicode, если строковый класс Unicode уже предоставлен в BCL. - person Allon Guralnek; 17.09.2009
comment
Строго говоря, System.String состоит из символов в кодировке UTF-16, а не из абстрактных кодовых точек (графем) Unicode 5. Если ваше приложение заботится о разнице (в большинстве случаев в этом нет необходимости), вы можете использовать класс System.Globalization.StringInfo. - person Christian Hayter; 19.09.2009
comment
Можно ли создать язык, совместимый с CLS, без поддержки System.String? - person Chris S; 21.09.2009

В Python 3 было много критических изменений, в том числе переход на Юникод для всего текста.

Итак, Python не был разработан специально для Unicode, а Python 3 был.

person Mark Rushakoff    schedule 12.09.2009
comment
Поддержка Unicode была добавлена ​​в Python в 2000 году. Так что пока это еще не так. python.org/dev/peps/pep-0100 (изменить: фактически этот документ был преобразован в PEP в 2000 году, поддержка Unicode, вероятно, предшествовала этому) - person fuzzyman; 01.02.2012
comment
Я удивлен количеством голосов за этот ответ. Python 3 - это всего лишь основная версия, а не новый язык программирования. - person yeyo; 30.01.2015

Я не знаю, насколько далеко это зашло в других языках, но забавная вещь в C # заключается в том, что не только runtime (класс string и т. Д.) Поддерживает unicode, но и полностью поддерживается в исходном коде:

using משליט = System.Object;
using תוצאה = System.Int32;
public class שלום : משליט  {
    public תוצאה בית() {
        int אלף = 0;
        for (int λ = 0; λ < 20; λ++) אלף+=λ;
        return אלף;
    }
}
person Marc Gravell    schedule 18.09.2009
comment
(обратите внимание, что, возможно, есть какая-то странная проблема с написанием справа налево в вышеупомянутом браузере / редакторе; если вы вставите его в VS, это будет int {name} = 0) - person Marc Gravell; 19.09.2009
comment
@gw: попробуйте запустить "πθ√".Select(c=>CharUnicodeInfo.GetUnicodeCategory(c)) в LINQPad, и вы поймете почему ;-) - person Eamon Nerbonne; 21.09.2009
comment
То же самое в Perl 5 и Perl 6. Perl 6 имеет даже операторы Unicode. - person Alexandr Ciornii; 06.12.2009
comment
Python уже давно поддерживает явное кодирование файлов исходного кода. Только в Python 3 вы можете иметь идентификаторы Unicode. Операторы Unicode - ужасная идея ... - person fuzzyman; 01.02.2012

Язык программирования Go от Google поддерживает Юникод и работает с UTF-8.

person Rohit    schedule 09.02.2011

Действительно сложно с самого начала спроектировать поддержку Unicode в будущем в языке программирования.

Java - один из языков, для которых это было встроено в языковую спецификацию. Однако поддержка Unicode в версии 1.0 Java отличается из v5 и v6 Java SDK. В первую очередь это связано с версией Unicode, которой учитывалась спецификация языка при первоначальной разработке языка. Java пытается отслеживать изменения в стандарте Unicode с каждым основным выпуском.

Ранние реализации JLS могли требовать поддержки Unicode, в первую очередь потому, что сам Unicode поддерживал 65536 символов (v1.0 Java поддерживала Unicode 1.1, а Java v1.4 поддерживала Unicode 3.0), что было совместимо с 16-битным пространством хранения, занимаемым символами . Это изменилось с появлением Unicode 3.1 - это развивающийся стандарт, обычно с добавлением большего количества символов в каждой версии. Символы, добавленные позже в 3.1, назывались дополнительными символами. Поддержка дополнительных символов была добавлена ​​в Java 5 через JSR-204; Java 5 и 6 поддерживают Unicode 4.0.

Поэтому не удивляйтесь, если разные языки программирования по-разному реализуют поддержку Unicode.

С другой стороны, PHP (!!) и Ruby изначально не имели встроенной поддержки Unicode.

PS: Поддержка Unicode версии 5.1 должна быть сделана в Java 7.

person Vineet Reynolds    schedule 13.09.2009

Как отмечали другие комментаторы, языки Java и .NET, хотя строки Java - это UTF-16, а не UCS или UTF-8. (В то время это казалось разумной идеей! Теперь ясно, что лучше использовать UTF-8 или UCS.) И Python 3 действительно является другим, несовместимым языком с Python 1.x и 2.x, поэтому он тоже подходит.

Языки Plan9 примерно в 1992 году, вероятно, были первыми, кто сделал это: их диалекты C, rc, Alef, mk, ACID и т. Д. Были все с поддержкой Unicode. Они использовали очень простой подход: все, что не было ASCII, было символом идентификатора. См. Их статью от 1993 г. тема. (Это проект, в котором был изобретен UTF-8, а это означало, что они могли делать это довольно совместимым способом, в частности, без сопоставления двоичного кода с текстом во всех своих программах.)

Другие языки, поддерживающие идентификаторы, отличные от ASCII, включают текущий PHP.

person Kragen Javier Sitaker    schedule 19.09.2009

Perl 6 полностью поддерживает юникод с нуля.
компилятор Rakudo Perl 6, являющийся первой реализацией)

Общий обзор

операторы Unicode

Строки, регулярные выражения и грамматики - все работают на основе графем, даже для тех комбинаций кодовых точек, для которых нет составного представления (для этих случаев искусственная кодовая точка составленного представления создается на лету).

Существует специальная кодировка для обработки данных с неизвестной кодировкой utf8-c8: при этом предполагается, что utf-8, когда это возможно, но создает искусственные кодовые точки для некодируемых последовательностей, позволяя им при необходимости выполнять двусторонний обход.

person Elizabeth Mattijsen    schedule 03.03.2017

Python 3.x: http://docs.python.org/dev/3.0/whatsnew/3.0.html

person janneb    schedule 12.09.2009

Иногда функция, которая была включена в язык при его первоначальной разработке, не всегда лучшая.

Языки со временем изменились, и многие из них раздулись дополнительными функциями, при этом не обязательно поддерживать в актуальном состоянии те функции, которые он изначально включил.

Поэтому я просто отбрасываю идею о том, что не обязательно сбрасывать со счетов языки, в которые недавно добавлен Unicode. У них будет преимущество добавления Unicode в уже зрелый инструмент разработки и возможность сделать это правильно с первого раза.

Имея это в виду, я хочу убедиться, что здесь Delphi включен в качестве одного из ваших ответов. Embarcadero добавила Unicode в свою версию Delphi 2009 и отлично поработала над этим. Этого было достаточно, чтобы наконец предложить мне перейти на Delphi 4, который я использовал 10 лет.

person lkessler    schedule 21.09.2009

Java использует символы из набора символов Unicode.

person sdu    schedule 12.09.2009
comment
Большинство языков программирования используют символы из набора символов Unicode. (они просто накладывают ограничения на то, какие символы они используют) - person Pete Kirkham; 13.09.2009

языки java и .net

person eglasius    schedule 19.09.2009