2010-10-14 2 views
9

Это любопытство больше всего на свете: существует ли язык программирования, который позволяет использовать имена переменных, функций и классов с использованием Unicode, а не ASCII (за исключением, конечно, специальных символов, таких как ' + ')? Поддерживают ли какие-либо популярные языки поддержку этого?Язык программирования на основе Unicode

Также, связанный с этим, если какой-либо общий язык поддерживает Unicode, то есть ли способ конвертировать существующий API в язык по своему выбору? Похоже, было бы полезно дать программисту возможность изучать API на своем родном языке. Я предполагаю, что вы загружаете стандартный API (например, boost), а затем загружаете стандартное трансляцию, а затем можете программировать на своем родном языке.

+8

Я не согласен с тем, что полезно изучить API на вашем родном языке. Практически ни один API-интерфейс не поддерживает это, так что вы просто так быстро устаете от английского языка. Btw, имена функций в формулах excel были переведены. Это делает королевскую боль взади, чтобы поговорить с кем-то о формулах excel, если вы не используете один и тот же язык/версию. –

+4

Можете ли вы назвать достаточно современный и профессиональный язык программирования, который * не *? (PHP не считается профессиональным :)) – Timwi

+4

Я сомневаюсь, что это имело бы смысл для такого языка. Только представьте, у вас есть язык, на котором английский пользователь пишет «если var больше 5, а затем выполняет некоторую функцию()», а другой пишет на немецком языке «wenn var größer als 5 dann mache irgendeinefunktion». Мне не полезно писать код, где переменные имена являются китайскими. язык должен быть одинаковым для всех, и если вы хотите работать с программой, некоторый английский в основном является обязательным (я немецкий). Это облегчает программирование для всех, а не для ограниченного круга пользователей. – Tseng

ответ

6

Как вы можете видеть из других ответов, большинство современных языков позволяют это, включая Perl, Python, Go, Ruby, Java, C♯, варианты lisp, Fortess, ADA и многие другие. C и C++ - нет, но они не современные.

Что касается C♯ от MSDN:

Правила для идентификаторов, приведенных в данном разделе в точности соответствуют тем, которые рекомендованы в стандарте Unicode Standard Приложение 15


Что касается преобразования API на выбранный язык - это невозможно. Вам понадобится переводчик, который понимает нюансы и смысл каждого метода, имени переменной и класса и правильно их переводит - это не то же самое, что у использовать символы выбранного языка в коде.

+0

Я считаю, что рубин тоже. – Ikaso

+0

Что касается преобразования API на другой язык. Я не хочу подразумевать автоматический машинный перевод. Скорее, если бы я был китайцем, я бы хотел использовать Boost в сочетании с некоторыми стандартно принятыми * API-скинами *, которые преобразуют Boost API в китайский. Таким образом, было бы намного легче учиться. Разумеется, было бы немного сложно говорить с английским докладчиком, но я думаю, что API-скин позволил бы перевести и другое направление. Кроме того, когда средний китайский программист говорит о программировании, он, скорее всего, разговаривает с другим китайцем. – JnBrymn

+0

Не писать код на том языке, о котором вы думаете/говорите, является преимуществом IME, так как это позволяет дать технические термины техническому смыслу, которое не омрачено обычным смыслом терминов, как правило, имеющим чуть более свободные отношения. –

3

Ada (среди других) позволяет использовать интернационализированные идентификаторы с использованием UNICODE.

Однако мое личное мнение заключается в том, что программное обеспечение должно быть написано с использованием единого, общепринятого и достаточно простого языка (очевидно, на английском языке) для поощрения сотрудничества, обеспечения понятности и повторного использования кода.

+0

Одиночный, универсально понятный и достаточно простой ... Английские баллы 0,5 из 3. (0 для одиночных, 0,5 для достаточно простых) –

+1

@ kotlinski: английский язык близок к универсально понятному (среди наиболее распространенных языков и, безусловно, наиболее распространенному среди техников - http://meta.stackexchange.com/questions/ 13676/is-english-required-on-stack-overflow содержит несколько хороших данных). И хотя английский * * сложный, * все * естественные языки по своей сути сложны, а английский язык не самый худший (например, немецкая грамматика намного больше и имеет более неприятные угловые случаи). – delnan

+0

@kotlinski Это, конечно, субъективно. На мой взгляд, когда я думаю о языках, которые я знаю или узнал в прошлом, сложность и легкость такова: английский <Нидерланды <немецкий <русский <чешский. Чешский язык - мой родной язык, и я уважаю иностранцев, которые могут его испортить. С другой стороны, английский кажется самым простым. Как только я увидел исходный код Ada, написанный на китайском языке ... Я не знал, что происходит! :-) –

1

Некоторые реализации общего lisp позволят это. AFAIK спецификация языка не запрещает его или не требует (требуется только базовый набор символов ASCII).

2

Delphi имеет эту функцию с версии 2009

1

Tcl позволяет использовать символы Unicode для имен команд и переменных, хотя рекомендуется избегать их для имен переменных, поскольку синтаксис ярлыка не справляется в данный момент (т. Е. Вместо этого вы должны использовать форму [set Ω] от ).

2

.Net поддерживает Unicode, и я ежедневно работаю с переменной Unicode C#.

2

C#, Java, Python3, насколько я знаю, все программируются на основе Unicode.

Я не нашел никого из вышеупомянутых Python, поэтому я добавил его.У Python есть функция фэнтези: все (функция, класс, модуль, переменная, экземпляр класса) является объектом, и каждый объект может прикрепить документ для его описания. Эта функция может быть полезна для организации кода и выполнения сценария в интерактивном режиме. Например:

# Python code in interactive mode 
>>> def MyFunc(): 
    '''This is self-included document. 
It can be write in multi lines.''' 
    print('foobar') 
>>> print(MyFunc.__doc__) 
This is self-included document. 
It can be write in multi lines. 
>>> MyFunc() 
foobar 
1

Scheme, PLT Ракетка и Лисп ароматизированных Erlang все позволяют Юникод идентификаторы (из простых благодаря синтаксису приставки)

0

Perl и Go и позволяют полные идентификаторы Unicode. Perl требует объявление use utf8;, но Go делает это автоматически.

См. UAX#31: Unicode Identifier and Pattern Syntax, для различных целей.

В общем случае идентификатор должен соответствовать шаблону ^\p{ID_Start}\p{ID_Continue}*$, хотя языки могут свободно добавлять к нему. Например, Java добавляет символы валюты (\p{Sc}), включая $.

0

Рассмотрим Swift, представленный Apple, в 2014 г. Вот фрагмент кода:

вар 国 = «美国»

удачи с поисками лучшей!

+0

country = America? : P Мой Кандзи немного ржавый. – JnBrymn

+0

Прошло некоторое время, чтобы прочитать это, потому что 'var 國 =" 美國 "' 国 упрощен для 國 (或 → 玉) – Hector

Смежные вопросы