«Национальные» языки программирования

Когда мне в очередной раз пришлось столкнуться с 1С, я заинтересовался, существуют ли ещё какие-либо языки программирования с ключевыми словами не на английском. Что не удивительно, таких языков оказалось не так уж и мало, и как я и предполагал, большинство из них предназначено либо для обучения программированию, либо созданы энтузиастами и поэтому не предназначены для серьёзных разработок. Ниже я предлагаю вам обзор нескольких таких языков (которые мне показались наиболее интересными). Естественно, статья написана исключительно в ознакомительных целях и в ней нет выводов о том, нужны ли такие языки или нет.

1) GOTO++

Сайт: http://www.gotopp.org/
Языки: французский, английский

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

• Для записи аргументов функции необходимо, чтобы они стояли правее левой скобки (при этом местонахождение правой скобки не имеет значение).
• Комментарии пишутся после ключевого слова GOTO.
• Для группировки математических операций вместо круглых скобок используются фигурные, причём расположенные в обратном порядке (}{).
• Целочисленные, вещественные и символьные литералы записываются с использованием спецсимволов.
I=*(3)
J=?-90,5
K=*`a'
• Функция GOTOGOTO даёт возможность перехода на одну из меток с указанной после знака вопроса вероятностью (при этом, если суммарное значение вероятности меньше 100%, то появляется шанс на переход на следующую строчку программы):
§100
GOTOPRINTDUTEXTE(); «Hello universe»
§2989
GOTOPRINTDUTEXTE(); «Hello world»
GOTO После выполнения функции GOTOGOTO программа с вероятностью 50% перейдёт на метку 2989, с вероятностью 40% на метку 100 и с вероятностью 10% на следующую строчку.
GOTOGOTO() %2989 ?50 %100 ?40
GOTOPRINTDUTEXTE(); «Hello exit»


Более подробно ознакомиться с языком вы можете в официальной документации (на французском): http://www.gotopp.org//doc/html/index.html

Пример программы «99 bottles of beer»:
GOTO 99 bottles of beer

niveaugourou 0

GOTO Vars
msgBtle = « bottle»
msgWall = « of beer on the wall»
msgBeer = « of beer.;n»
msgTake = «Take one down, pass it around, »
newLine = «;n;n»
msgEnd = «Go to the store and buy some more, »
msgNoN = «No more»
msgNon = «no more»
plural = *`s'
beers = *(99)

GOTO Loop
§1
GOTOPRINTDUTEXTE() &msgWall &plural &msgBtle &beers
GOTOPRINTDUTEXTE() &msgBeer &plural &msgBtle &beers *` ' *`,'
GOTOPRINTDUTEXTE() &msgTake
beers = &beers ++ *(-1)
AUTOGOTOZ } &beers eg *(1) {
plural = «»
AC
AUTOGOTOZ } &beers eg *(0) {
beers = &msgNon
plural = *`s'
AC
GOTOPRINTDUTEXTE() &newLine *`.' &msgWall &plural &msgBtle &beers
GOTONONNULPOURLESNULS %1 &beers

GOTO Last verses of the song
GOTOPRINTDUTEXTE() &msgWall &plural &msgBtle &msgNoN
GOTOPRINTDUTEXTE() &msgBeer &plural &msgBtle &msgNon *` ' *`,'
GOTOPRINTDUTEXTE() &msgEnd
GOTOPRINTDUTEXTE() &newLine *`.' &msgWall &plural &msgBtle «99»

2) Lexico

Сайт: lexico.mobi
Язык: испанский

Обучающий объектно-ориентированный язык программирования, созданный на платформе .NET Framework.

В комплекте с компилятором идёт простенькая IDE.
Синтаксически язык похож на C#, но является более многословным. Из особенностей можно выделить необходимость использования ключевого слова copie вместо оператора присваивания, а также то, что объект автоматически инстанцируется при объявлении переменной, если не указать ключевое слово no_crear.
Оператор ветвления в языке имеет следующий вид:

es <условие>?
si:
{
    <выражение_1_если_условие_истинно>
}
no:
{
    <выражение_2_если_условие_ложно>
}



Пример ввода и вывода данных:
tarea
{
    los objetos valor1, valor2, resultado son cantidades //объявляем переменные типа integer
    entre valor1, valor2 //ожидание ввода данных в консоли
    copie valor1*valor2 en resultado

    es resultado > 15?
    si:
    {
        muestre resultado, " > 15"
    }
    no:
    {
        muestre resultado, " <= 15"
    }
}


Пример с созданием графического окна:
clase FormTest derivada_de system.windows.forms.form
{
    privados:
        el objeto valor es un caracter //private поле типа string

    mensajeS:
        FormTest
        {
            copie «FormTest» en valor
            copie valor en FormTest.text
        }
}

3) Mama

Сайт: http://en.eytam.com/mama/
Языки: иврит, идиш, английский

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





В платной версии редактора вы можете писать сценарии двумя способами:
• Средствами графического программирования (наподобие как в LabVIEW), путём перетаскивания «плиток» с инструкциями в область редактора.
• При включении параметра enableFreeScripting, становится возможным писать код программы в текстовой форме.

Пример программы с созданием графического окна и рисованием на нём:

На иврите
מחלקה תכנית_ציור יורש חלון
    תגובות ללחיצה על העכבר #
    מתודה תקנית: תגובה לאירוע לחיצה על מקש העכבר # (x, y)מתודה עכבר_נלחץ
        צב.מקום(x, y)
    מתודה תקנית: תגובה לאירוע גרירת העכבר # (x, y)מתודה עכבר_נגרר
         צב.אל(x, y)

הגדר ת=תכנית_ציור() # יצירת עצם מהמחלקה של התכנית — גורם ליצירת חלון ולתחילת תגובה לאירועי העכבר

Попробуйте найти ошибку в данной программе

На идише
קלאס צייכענונג_אפ ינכעראץ פענצטער
    שעפן מויז געשעענישן#
    מעטאד מויז_געדריקט(אקס, ווי) #נארמאל מויז געדריקט אופן
         טשערעפאכע.שטעלע(אקס, ווי) #טשערעפאכע רעפריזענץ דעם איצטיקן פעדער ארט

    מעטאד מויז_דראגד(אקס, ווי) #נארמאל מויז דראגד אופן
        טשערעפאכע.צו(אקס, ווי) #ציען שורה פון א פאזיציע צו די געגעבן איין

דעפינירן אפ=צייכענונג_אפ() #אנהייבן די אפלאקיישאן — שאפן ניו אפלאקיישאן כייפעץ

На английском
class DrawingApp inherits Window

# handle mouse events

method mouse_pressed(x, y) # standard mouse pressed method
    turtle.position(x, y) # turtle represents the current pen location

method mouse_dragged(x, y) # standard mouse dragged method
    turtle.to(x, y) # draw line from current position to the given one

define app=DrawingApp() # start the application — create new Application object





4) Robomind

Сайт: www.robomind.net/
Языки: арабский, болгарский, каталанский, чешский, немецкий, греческий, английский, испанский, французский, венгерский, индонезийский, итальянский, древнееврейский, корейский, нидерландский, польский, португальский, русский, словацкий, словенский, шведский, тайский, турецкий, украинский, китайский

Среда для обучения программированию, в которой нужно управлять исполнителем в лице робота. Робот умеет совершать следующие базовые действия: двигаться, рисовать, смотреть, перетаскивать маяки, а также подбрасывать монетку. В языке доступны основные базовые конструкции, такие как циклы, ветвления и процедуры.



Пример программы, в которой робот двигается вдоль белой дорожки:

На венгерском
jobbra
előre(8)

ismétel
{
    ha(előlFehér){
        előre(1)
    }
    máskép ha(jobbraFehér){
        jobbra
    }
    máskép ha(balraFehér){
        balra
    }
    máskép ha(vanElőlAkadály){
        vége
    }
}

На шведском
höger
framåt(8)

uprepa
{
    om(framåtÄrVit){
        framåt(1)
    }
    annars om(högerÄrVit){
         höger
    }
    annars om(vänsterÄrVit){
        vänster
    }
    annars om(framåtÄrHinder){
        slut
    }
}

На русском
направо
вперед(8)

повтор
{
    если(впередиБелый){
        вперед(1)
    }
    иначе если(справаБелый){
        направо
    }
    иначе если(слеваБелый){
        налево
    }
    иначе если(впередиПрепятствие){
        закончить
    }
}

5) Fjölnir

Сайт: https://notendur.hi.is//~snorri/fjolnirdev
Язык: исландский

Язык программирования, разработанный профессором информатики Исландского университета Снорри Агнарссоном, и пик популярности которого пришёлся на 1980-е годы.

Hello world:
;; Hello world in Fjölnir
«hello» < main
{
    main ->
        stef(;)
        stofn
            skrifastreng(;«Hello, world!»),
        stofnlok
}
*
«GRUNNUR»
;

Язык примечателен своей работой с модулями. В других языках, как правило, модули подключаются перечислением их имён. В Fjölnir пакеты подключаются с помощью алгебраических операций.
В примере ниже («99 bottles of beer») модуль из базовой библиотеки GRUNNUR включается в безымянный модуль, содержащий функцию bottles, а тот в свою очередь включается в главный модуль программы.
«bottles» < main
{
    main ->
        stef(;)
        staðvær i,b
        stofn
            fyrir( i := 100; i > 1; i := i-1) lykkja
                bottles(;i-1),
                skrifastreng(;" on the wall, "),
                bottles(;i-1),
                skrifastreng(;",\ntake one down, pass it around, \n"),
                bottles(;i-2),
                skrifastreng(;" on the wall.\n"),
            lykkjulok,
        stofnlok
}
*
{
    bottles ->
        stef(;n)
        stofn
            val n úr
            kostur 0 þá
                skrifastreng(;«no more bottles»),
            kostur 1 þá
                skrifastreng(;«1 bottle of beer»),
            annars
                skrifa(;n),
                skrifastreng(;" bottles of beer"),
            vallok
        stofnlok
}
*
«GRUNNUR»
;

Подробнее по данной теме вы можете почитать здесь: http://morpho.cs.hi.is/papers/p117-agnarsson.pdf

Ещё один пример программы, производящей расчёт числа Эйлера через разложение Тэйлора, с кратким описанием:
;; Автор: Snorri Agnarsson
«e» < aðal
{
    aðal ->
        ;; перечисление входных параметров
        stef(;)
        ;; объявление переменных
        staðvær n,liður,summa,i
        ;; начало функции
        stofn
            ;; вывод строки на экран
            skrifastreng(;«Программа выводит число Эйлера с указанным числом знаков после запятой.»),
            ;; разрыв строки
            nÿlína(;),
            skrifastreng(;«Сколько вывести знаков после запятой? „),
            ;; считывание значения с клавиатуры
            n:=lesa(;),
            liður:=10 ^ (6+n),
            summa:=0,
            i:=2,

            ;; цикл с расчётом значения
            meðan liður > 0 lykkja
                liður:=liður/i,
                summa:=summa+liður,
                i:=i+1,
            lykkjulok,

            skrifastreng(;“e=2.»),
            ;; вывод числа на экран
            skrifafjöl(;(summa/1000/100+5)/10),

        ;; конец функции
        stofnlok
}
*
«storfjol»
*
«grunnur2»
;

6) Hindi.Net

Сайт: http://www.sktnetwork.com/portfolio/hindi-programming-language
Язык: хинди



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

Пример:
कार्य खाली मुख्य()
    छोड़ें комментарий

    छोड़ें अंक – переменная типа number
    अंक
    अंक

    छोड़ें पढें – ожидание ввода данных в консоли
    पढें
    पढें

    छोड़ें अगर – if; वरना – else; खत्म अगर – end if
    अगर {अ*प > 20}
        लिखें "> 20"
    वरना
        लिखें "<= 20"
    खत्म अगर

    छोड़ें पंक्ति – переменная типа string
    पंक्ति
    पढें

खत्म कार्य

7) Farsi.NET

Сайт: https://skydrive.live.com/?cid=3753598452050A56&id=3753598452050A56!270
Язык: Персидский

Ещё один язык, написанный под .Net, но с ключевыми словами на персидском языке. Его особенностью является то, что он фактически транслируется в C# и данный сгенерированный код можно посмотреть на специальной вкладке в IDE поставляемой вместе с языком. По этой причине в одном проекте могут быть как классы, написанные на Farsi.NET, так и классы на C#.





8) Scratch

Сайт: http://scratch.mit.edu/
Языки: более 60

Обучающий язык программирования, созданный в MIT Media Lab и предназначенный для создания простых мультфильмов и игр. Является рекордсменом по числу локализаций. Программы на Scratch строятся, как и в Mama, из графических блоков. Вторая версия редактора (сейчас в стадии beta) написана на Adobe Flash.



Основные возможности:
• Работа с растровой графикой
• Работа с векторной графикой (со 2 версии)
• Работа со звуками.
• Поддержка событий.
• Существует возможность публиковать свои работы на специальной страничке: beta.scratch.mit.edu/explore/projects/all



На этом, пожалуй, я закончу данный обзор. Если вас вдруг заинтересовала эта тема, список других языков вы можете посмотреть по ссылке: http://en.wikipedia.org/wiki/Non-English-based_programming_languages
Поделиться публикацией

Похожие публикации

Комментарии 54
    +1
    Помню Scratch, на первом курсе преподаватель показывал. Забавная штука :)
      0
      UPD: насколько я помню, он еще и мяукает
        0
        В дистрибутиве Raspbian (ОС для мини-компа Raspberry Pi) эта среда идет в комплекте. Так и не понял зачем она там стоит, среда программирования для детей больше она.
          0
          Распи cделали для обучения школьников, так что всё как надо.
        +10
        Пожалуй больше всего вынесли мозг фигурные скобки в Farsi.NET.
          0
          Скобки ладно, а вот «дерево» справа и разворачивающееся влево… Я как-то думал, что только читают они справа налево, а остальное «как у людей».
            +1
            а я еще на иврите подумал, что выравнивание по левому краю — странно :)
              +2
              меня насторожило уже то, что уважаемый хабраюзер начал думать на иврите
              0
              progress bar у них тоже с права налево ползет.
            +2
            Lexico впечатлил и порадовал артиклями и ключевыми словами в разных формах.
            Раздолье для начинающих учить испанский :))

            el objeto X es una Cantidad
            los objetos a, b, c son Cantidades
              +1
              Fjölnir понравился
              0
              А существуют ли популярные языки программирования на национальных языках помимо 1С?
                0
                К такому языку можно отнести 4th Dimension (французский, немецкий, японский, иврит, арабский, корейский и персидский): http://en.wikipedia.org/wiki/4th_Dimension_%28software%29

                В рейтинге TIOBE (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) на данный момент он занимает 51 место.
                  0
                  Немного соврал. Это сама программа локализовано на такое большое число языков, а ключевые слова можно писать на французском и немецком.
                    +1
                    Ничего не могу сказать насчет популярных, но существует ЯП Кукарача.
                      0
                      А как вы оцениваете популярный или нет?
                        0
                        По количеству реализованных проектов, по количеству программистов знающих язык, по количеству пользователей использующих программы написанные на этом языке программирования, по количеству вакансий
                      +1
                      На иврите должно было быть:
                      מתודה תקנית: תגובה לאירוע לחיצה על מקש העכבר # (x, y)מתודה עכבר_נלחץ
                              (x, y)צב.מקום
                          מתודה תקנית: תגובה לאירוע גרירת העכבר # (x, y)מתודה עכבר_נגרר
                               (x, y)צב.אל
                      

                      ?
                        0
                        Я надеялся, что текст, выделенный красным, намекнёт, что это шутка :)
                        А вообще, некоторые текстовые редакторы именно так и пытаются «исправить» код при копировании.
                          0
                          Невнимательно посмотрел ваш код :)
                          То что я написал про текстовые редакторы, к вашему примеру не относится, просто некоторые из них так и норовят переставлять слова при копировании.
                            +16
                            Вы стали победителем в викторине «найди еврея».
                              0
                              Нет, в первой и третьей строках комментарием является левая часть.
                                0
                                Извиняюсь, в глаза бросился другой цвет текста и подумал, что закомментировалась правая часть… Пора спать…
                                Вы правы, (x, y) во второй и четвертой строках должны стоять слева.
                              +19
                              #define OCHOBHOE main
                              #define OT {
                              #define nO }
                              #define KPyTu for
                              #define BOnPOC if
                              #define BEPHu return
                              #define OTBET return
                              #define HE !
                              #define nE4ATb printf
                              #define MHOrO int
                              #define PABHO =
                              #define uC4O <
                               
                              MHOrO OCHOBHOE()
                              OT
                                  MHOrO A;
                               
                                  KPyTu( A PABHO 0; A uC4O 8; A++ )
                                      nE4ATb( "%d\n", C4uTAu( A ) );
                               
                                  BEPHu 0;
                              nO
                               
                              MHOrO C4uTAu( MHOrO oT )
                              OT
                                  BOnPOC( HE oT )
                                      OTBET 1;
                               
                                  BEPHu oT * C4uTAu( oT - 1 );
                              nO
                              
                              @Говнокод #1221
                                0
                                в вашу коллекцию barsic.spbu.ru/
                                  +4
                                  Почти по теме. В казанском универе был, и щас работает, наверно, один преподаватель по программированию, забыл уже, как его зовут… Он татарин, и скорее всего, родом из деревни, то есть думать ему проще на татарском, получается. Следствие из всего этого: когда он пишет программку «для себя», легко может назвать переменные на татарском языке, например, tartip («порядок»). Долгая история, но ко мне как-то обратились, чтоб я, зная татарский, объяснил, чего он понаписал в проге, потому что это была тотальная обфускация для русских — вроде, операторы те же, буквы латинские, а не понятно вообще ничего!
                                    +3
                                    Будучи студентом КАИ, спросил как то у одногруппника переписать лекцию по матану, он мне без вопросов дал тетрадь. Придя домой и открыв тетрадь, я долго злился, увидев лекцию, которая была записана на татарском языке. Вот это блин обсфукация (
                                      +1
                                      Разве не пристало студенту в Казани знать базовый татарский?
                                        0
                                        В школе пытались учить, сейчас даже уроков татарского языка больше чем русского (националисты поработали блин), но насильно заставлять учить язык бесполезно. У нас с этим не всегда адекватно (
                                        А в техническом вузе слава богу не было этого предмета, только русский и английский.
                                    +2
                                    Был и есть русский автокод Эль-76.
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        0
                                        Я не понимаю смысла этого, но любой язык программирования можно так использовать если просто пропустить его через синтаксический препроцессор.
                                          +3
                                          + язык Рапира. в «Науке и жизни» читал в детстве
                                            +3
                                            В 1С вообще-то есть и на английском ключевые слова.

                                            Первое, что приходит в голову — Ершол, он же Школьный алгоритмический язык из учебников информатики. Для него были среды разработки — КуМир.
                                              +3
                                              В 1С вообще-то есть и на английском ключевые слова.

                                              Это Promt не всё смог перевести с бейсика.
                                                –1
                                                >>В 1С вообще-то есть и на английском ключевые слова.

                                                Возможно ситуация когда-нибудь изменится, если 1С получит распространение за пределами СНГ, но пока использование английского является моветоном и только ухудшает чтение кода.

                                                  0
                                                  Вспоминая конец 90-х: бог с ним с чтением (вроде даже удобней читать) — английский синтаксис сильно затрудняет написание кода, поскольку обычно во всех конфигурациях всё именуется по-русски.
                                                +1
                                                А как же Лого? Вроде десятки локализаций.
                                                  0
                                                  В конце 80-х — начале 90-х в Болгарии выпускался ПК «Правец». Там этот ЛОГО, если не ошибаюсь, был в ПЗУ зашит.
                                                  +1
                                                  ChinesePython еще прикольный)
                                                  +1
                                                  Еще есть задатки «олатынивания» Perl-а: http://habrahabr.ru/post/151413/
                                                      +1
                                                      Есть еще такой интересный вариант как язык Forth, который является расширяемым и изначально содержит минимум команд на английском — позволяет создать свою систему команд на любом языке.
                                                        +1
                                                        Как перевести Python на ваш любимый язык. Осторожно, португальский.
                                                          +1
                                                          Есть ещё два забытых языка. Относительно национальных.

                                                          1) Боярский. Аки бояре глаголили. На основе старо-славянского. Вот небольшой пример программы: habrahabr.ru/post/41561/
                                                          2) Эзотерический язык программирования под названием «… твою мать» он наших китайских братьев. На основе, разумеется, китайского: habrahabr.ru/post/78102/
                                                            +1
                                                            habrahabr.ru/post/116653/ локализованный Mootools

                                                            И да, вот ещё язык:
                                                            habrahabr.ru/post/116301/
                                                            habrahabr.ru/post/129109/
                                                              0
                                                              Язык Глагол
                                                                +1
                                                                Мой опыт взаимодействия с израильскими заказчиками показал, что, несмотря на весь юникод, иврит совершенно неприемлем для не владеющих им людей. Поскольку даже просто визуально сравнить имена двух файлов почти невозможно (особенно если одно из них присутствует на скриншоте и написано другим шрифтом). Ну а то, как двигается курсор в строке, содержащей одновременно иврит (справа налево) и английский (как обычно) — это вообще тихий ужас. После этого в ТЗ следующего этапа появилось требование: все файлы, присутствующие в багрепортах, должны иметь имена, состоящие только из латинских букв. Так что i18n помогает далеко не всегда.
                                                                  0
                                                                  про 1С уже писали?
                                                                    +1
                                                                    Если брать устаревшие языки программирования с русскоязычными ключевыми словами и синтаксисом то как минимум приходят на ум язык «Аналитик» (применялся в малых машинах машинах Мир), язык «Ямб» (язык маших бухгалтерских) применявшийся в ЭКВМ и ЭБТ Искра и Нева.
                                                                      +1
                                                                      Ещё вдогонку. Есть (был) язык LSE с французским синтаксисам, нам он в основном знаком по книге Жака Арсака «Программирование игр и головоломок».

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

                                                                      Самое читаемое