Современные информационные технологии/ 2Вычислительная техника и программирование

Кандидат педагогічних наук С.А.Мартиненко,

студент четвертого курсу О.О.Ганзера

ВСПНАУ Слов’янський коледж Національного авіаційного університету

Езотеричні мови програмування: зміст та синтаксис

На сьогоднішній день існує більше двох з половиною тисяч мов програмування. Теорія програмування, теорія компіляторів та інші суміжні науки передбачають вивчення концепцій мов програмування з різних точок зору. Так, можна поставити завдання: розробити мову програмування максимально відмінною від існуючих на даний момент мов програмування. Або, наприклад, завдання полягає в розробці мови програмування з мінімальним розміром компілятора. Можливою також є постановка завдання розробки максимально простої та максимально складної для програміста мов програмування. У процесі розв’язання кожного із вказаних завдань створюється унікальна специфічна мова програмування. Отже, актуальною постає проблема дослідження сучасних мов програмування, що утворюються в результаті розв’язання  поставлених завдань.

Метою дослідження є визначити зміст та синтаксис езотеричних мов програмування  Folders, Groot, Malbolge.  

Мови програмування, що не мають, як правило, безпосереднього застосування на практиці називають езотеричними. Назва пов'язана з тим, що текст програми на таких мовах часто зрозумілий лише обмеженому колу людей. Розглянемо приклади езотеричних мов програмування.

Програміст Д.Тьомкін створив езотеричну мову програмування Folders. Це перша мова, створена спеціально для його блогу esoteric.codes. Як випливає з назви, програмування в цій мові не вимагає файлів, потрібно лише дерево тек файлової системи, структура якого і визначає код. Приклад програми «Hello World» на мові Folders представлений на рис.1. [2]

Рис.1. Приклад програми «Hello World»

 

У своїй роботі по створенню Folders Д.Тьомкін ґрунтувався на вивчення езотеричної мови програмування Whitespace, в якій програмування здійснюється за допомогою символів, що зазвичай не відіграють великої ролі: пропуском, символом табуляції і перекладом рядка.

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

Інша особливість каталогів файлової системи – це те, що ієрархічне вкладення однієї теки в іншу схожі на структуру абстрактного дерева. При цьому верхній каталог має назву імені програми. Завдання команд і типів даних езотеричної мови програмування відображено у таблиці 1, таблиці 2 відповідно [2].

Таблиця 1. Команди езотеричної мови програмування Folders

Команда

Альтернативна назва

If

New Folder

While

Temp

Declare

Images

Let

Downloads

Print

Setup

Input

Logs

 

Таблиця 2. Типи даних езотеричної мови програмування Folders

Тип даних

Альтернативна назва

Int

Vacation photos

Float

Lang

String

Img

Double

User


На сьогоднішній день езотерична мова програмування Folders доступна тільки для Windows, компілятор можна знайти в репозиторії на GitHub.

Наступним прикладом езотеричної мови програмування, яка нещодавно з'явилась у мережі Internet є Groot. Щоб зрозуміти ідею даної мови програмування, потрібно згадати комікси Marvel або фільм «Вартові Галактики» (Guardians of the Galax), де мова одного з персонажів дуже складна, але всім іншим здається, ніби він повторює одну й ту ж фразу – «я є Грут». Лише з часом контактуючі з Грутом люди починають розуміти висловлювані інтонації. Groot – езотерична  мова, яка повторює принципи спілкування персонажа фільму «Вартові Галактики», і містить вісім команд визначення яких наведено у таблиці 3 [1, 2].

Таблиця 3. Визначення команд мови програмування Groot

Фраза

Значення

i am groot

збільшити значення в поточній комірці

I am Groot

зменшити значення в поточній комірці

I AM GROOOT

надрукувати значення з поточної комірки

I AM GROOT

перейти до наступної комірки

I am groot

перейти до попередньої комірки

I am groot

ввести значення із ззовні

I'm Groot

якщо значення поточної комірки нуль, перейти вперед по тексту програми на клітинку, наступну за відповідною We're Groot

We're Groot

якщо значення поточної комірки не нуль, перейти назад по тексту програми на I'm Groot

 

У 1998 році Б.Олмстед розробив мову програмування Malbolge з метою бути максимально складною для написання програм. Мова виявилась настільки складною, що код першої програми, що виводить повідомлення «HEllO WORld», згенерувала інша програма мовою Lisp, що використала пошук в множині всіх можливих програм, через два роки після появи самої мови Malbolge [1].

Відомий програміст Е.Юхас у своєму блозі анонсував три працюючі програми мовою Malbolge, що виводять ще три фрази. Дещо пізніше Лу Шеффер зробив  криптоаналіз мови, а Т.Вегжановскі написав генератор програм, що виводять задані рядки.

За своїм принципом Malbolge – це машинна мова для віртуальної машини, що працює в трійковій системі числення. У цій віртуальній машині є три регістра: a, c і d. Регістр c – регістр коду, який використовується в якості покажчика на поточну команду. Регістр d – регістр даних, що використовується для управління даними. Регістр a – акумулятор, що використовується деякими командами для маніпуляції даними. При запуску програми всі регістри дорівнюють нулю [1].

Всього в Malbolge є 8 команд. Віртуальна машина визначає, яку команду виконувати, таким чином: до значення комірки з адресою c ([c]) додається значення c, а в якості команди виступає залишок від ділення цього числа на 94 (оскільки у вхідному алфавіті мови 94 символи, ASCII-коди яких з 33-го по 126-й).

Наведемо приклад програми на Malbolge, що виводить повідомлення «Hello, world.»:

(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<

Підсумовуючи вище викладене визначаємо, що езотеричні мови програмування є специфічними і мало дослідженими мовами програмування, кожна з яких має свій унікальний синтаксис: типи даних, перелік команд, специфічні правила введення змінних тощо.

 Спільна властивість досліджуваних езотеричних мов програмування – текст програми  зрозумілий лише обмеженому колу людей або тільки розробнику мови, або незрозумілий взагалі, тому що для складання програми потрібно написати програму на звичайній мові програмування. У той час, як розробники «реальних» мов програмування намагаються зробити синтаксис максимально зрозумілим, а програмування –  зручним, творці езотеричних мов зазвичай ставлять перед собою протилежні завдання. На практиці такі мови, як правило, є непоганим тренуванням. Езотеричні мови нерідко включають в список дозволених мов на конкурсах з програмування.

 

Література:

1.   https://ru.wikipedia.org/wiki – сайт «Википедия Свободная энциклопедия».

2.   http://m.geektimes.ru/post/245166/  – сайт «Эзотерические языки программирования Folders и Groot / Хабрахабр».

3.   https://github.com/thiagopnts/groot  – article “The Groot Programming Language”.