2009-03-20 1 views
12

Я понимаю, что большинство языков поддерживают несколько языков, но каждый язык, который я видел, всегда был более или менее ориентированным на США. Под этим я подразумеваю ключевые слова, стандартные библиотечные функции и т. Д., Все имеют английские имена. Итак, как программист, вам по-прежнему нужно знать хотя бы какой-то английский, чтобы понять это.Действительно многоязычные языки программирования?

Есть ли на самом деле «многоязычные» языки с поддержкой языковых ключевых слов и т. Д. На нескольких языках?

+0

См. Также http://stackoverflow.com/questions/202723/coding-in-other-spoken-languages ​​ –

+0

См. Также http://stackoverflow.com/questions/288061/do-there-exist-any-compilers -with-localized-versions-of-programming-languages ​​ – JohnFx

ответ

29

Это, как правило, ужасная идея, так как любой, кто работал в локализованной среде IDE, может подтвердить это. Программисты в значительной степени полагаются на один общий словарь. Когда компилятор дает мне ошибку «отсутствующий спецификатор типа - int предполагается», я могу поделиться этим точным сообщением об ошибке с другими, например здесь, на SO, и это будет знакомым тем, кто может сказать мне, что это значит , Если компилятор вместо этого генерировал сообщения об ошибках на датском языке, я бы ограничился получением помощи от относительно немногих программистов, которые говорят на датском языке.

Внезапно мой словарный запас уже не совпадает с кем-то в том же положении в Германии, Франции или Японии. Мы больше не можем обмениваться кодом, ошибками, исправлениями ошибок или идеями.

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

В конечном счете, язык программирования язык. Возможно, он заимствовал несколько слов с английского языка, но он - это, а не английский, и вам не нужно понимать английский язык, чтобы программировать в нем, не больше, чем мне нужно понимать латинский язык, чтобы говорить по-английски (английский язык также занимает латинские слова).

Вы также можете попросить многоязычный английский.Какой будет? Да, это теоретически позволит людям, которые не говорят по-английски, ... говорить по-английски. Это просто не будет таким же английским, как говорит любой другой англоговорящий, поэтому на самом деле это не позволит общаться между ними.

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

Ключевое слово delegate в C# не означает то же, что и «делегат» на английском языке. Также не while, return или «конструктор». Это не английские слова, это ключевые слова или понятия в C++, Java, C#, Python или любой другой язык программирования.

+18

Точно, когда PHP говорит «Ошибка анализа: синтаксическая ошибка, неожиданный T_PAAMAYIM_NEKUDOTAYIM», мы все точно знаем, что пошло не так. –

9

Звучит как плохая идея для меня. Если я пишу программу, как мне узнать, что имя переменной, которую я набираю, на самом деле является ключевым словом на болгарском или корейском языке как транслитерированное? Должен ли я иметь дело с тысячами ключевых слов, или у меня проблемы с объединением двух подпрограмм, написанных моими шведскими и египетскими коллегами?

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

+0

Я вижу вашу точку зрения, но по-прежнему можно решить проблему ключевого слова, указав язык кода во время компиляции или сам файл кода. Библиотеки также могут быть решены путем предоставления «локализованных» имен для функций - то есть одна и та же функция может иметь несколько имен в зависимости от языкового стандарта. –

+0

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

2

Вы можете использовать препроцессор C/C++ для переопределения всех ключевых слов - и некоторые люди это сделали. Я наткнулся на это, работая тренером/наставником норвежской компании. Некоторая яркая искра реализовала впереди, который перевел все ключевые слова C на норвежский язык и принудительно использовал его. Норвежский персонал, все из которых говорили превосходно по-английски (или я не мог заработать свою кору), все это ненавидели, и он умер смертью.

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

0

Не пытайтесь кодировать на естественном языке, это бесполезно. Learn the "programming" language instead.

Например, слово «switch» ничего не знало для меня на английском языке, но это была инструкция по выбору нескольких вариантов.

Позже (когда я изучаю английский), я думал .. Эй, это смешно, английский действительно есть "переключатель" слово тоже, как и C. (DOH!)

:)

Нет как хорошо или плохо ваш английский, вы не можете сказать java

import java.util. * на свой CD-ROM;

Потому что это недействительный синтаксис.

0

Что относительно языков, таких как APL и J? Ключевые слова в APL - это одиночные символы; к сожалению, большинство из них не на вашей клавиатуре, поэтому я пришел и заменил большинство из них ASCII-представлениями (в большинстве случаев состоящими из более чем одного персонажа).

2

Существует одна область, где локализованный язык может быть полезным и полезным, и это DLS (Domain Specific Languages), которые были предназначены для использования не-программистами. Эти языки, безусловно, могут быть локализованы, поскольку бизнес-пользователи из стран, не говорящих по-английски, часто не знают английского языка, как и программисты.

Такие локализованные DSL могут оказаться полезными и для программистов, если они имеют дело с множеством непереводимых терминов. Одна довольно успешная система, с которой я столкнулся, использовалась для расчета заработной платы для персонала израильских военных. Он использовал синтаксис на основе иврита и сотни терминов, которые могут быть правильно выражены на иврите. В этом конкретном случае стандартные логические ключевые слова if, then, else и т. Д. Были переведены на иврит, а весь редактор кода был справа налево. Очень большой объем бизнес-логики поддерживается таким образом и по сей день и, ИМХО, справедливо.

0

Sorted!

Sorted! is bilingual. It can understand both english and german code. To my knowledge, Sorted! is the only programming language that can do this, in the world.

Любые полезные из них? Это лучший вопрос.

0

В значительной степени вы можете программировать в прологе в любом скрипте unicode (потому что это символический язык). Есть (крошечные, weeny) catch - переменные означаются начальным капиталом римской буквы во всех компиляторах пролога, с которыми вы, вероятно, столкнетесь, и вам придется переопределять встроенные модули (но пролог делает это относительно легко *).

Я думаю, что пример иллюстрирует то, что я имею в виду лучше:

% алгоритм нахождения пасхальной даты, учитывая год (в качестве первого аргумента)

復活節(V1, V2, V3) :- 
    A 是 (V1 mod 19), 
    B 是 V1// 100, 
    C 是 V1 mod 100, 
    D 是 B // 4, 
    E 是 B mod 4, 
    F 是 (B + 8) // 25, 
    G 是 (B - F + 1) // 3, 
    H 是 (19*A + B - D - G + 15)mod 30, 
    I 是 C // 4, 
    J 是 C mod 4, 
    K 是 (32 + 2*E + 2*I - H - J) mod 7 , 
    L 是 (A + 11*H + 22*K) // 451, 
    M 是 (H + K - 7*L + 114) // 31, 
    N 是 (H + K - 7*L + 114)mod 31, 
    V2 是 M, 
    V3 是 N + 1. 

/*

Пример тест:

? - 復活節 (2013, V2, V3). V2 = 3, V3 = 31

т.е. Пасха в этом году будет на 31 марта

*/

  • это то, что я по-новому строить в 'есть' оператор (не стреляйте в меня, если он несовершенен):

    : -op (500, xfy, 是).

    是 (X, Y): - is (X, Y).

2

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

Например, в Java, вы можете создать

public class HoweverYouSayExampleObjectInYourLanguage extends ExampleObjectName { 
    } 

, а затем создавать функции оболочки/методы с именами в целевом языке, но в основном называют существующие стандартные методы

private void HoweverYouSayExampleMethodInYourLanguage(parameters) { 
     this.ExampleMethod(parameters); 
     // Some error handling code 
} 

Если вы корректная обработка ошибок, трассировка/ошибки стека будут ссылаться на ошибки в стандартных библиотеках, если только это не было проблемой с реализацией вашей библиотеки локализации - в этом случае это должно быть указано через правильную обработку ошибок в локальных сама библиотека.

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

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