Pull to refresh

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

Reading time 12 min
Views 70K
Когда мне в очередной раз пришлось столкнуться с 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
Tags:
Hubs:
+105
Comments 54
Comments Comments 54

Articles