Вступ
Люди часто захоплюються незвичними та дивними експериментами у різних сферах — науці, літературі, музиці, мистецтві тощо. І програмна інженерія — не виняток, адже вона також охоче приймає експерименти та інновації. Уявіть собі мову програмування, синтаксис якої складається лише зі слова «chicken», пробілів і символів нового рядка. Або код, написаний виключно за допомогою пробілів, табуляцій і переходів на новий рядок. Звучить як жарт або божевільна фантазія? На диво, такі мови справді існують! У цій статті ми познайомимося з кількома найцікавішими представниками світу езотеричних мов програмування.
Які мови називаються езотеричними?
Езотерична мова програмування (скорочено езомова або esolang) — це мова, створена насамперед для інтелектуального виклику або художнього експерименту, а не для практичного використання.
Такі мови часто мають незвичний синтаксис, семантику та принципи дизайну, які кардинально відрізняють їх від традиційних мов програмування. Езомови зазвичай створюються для того, щоб дослідити нетипові концепції, розширити межі можливого у програмуванні або просто для розваги.
Хоча вони рідко застосовуються у реальних проєктах, езотеричні мови служать майданчиком для експериментів, творчості та іноді гумору серед спільноти розробників. У сьогоднішній статті ми розглянемо такі мови, як Malbolge, Whitespace, Brainfuck та Chicken.
INTERCAL
INTERCAL (повна назва — Compiler Language with no Pronounceable Acronym) фактично є першою езотеричною мовою програмування, яку коли-небудь було створено.
Її розробили у 1972 році Джим Лайон та Дон Вудс як пародію на існуючі тоді мови програмування. Хоча сучасні езомови вже давно перевершили INTERCAL за рівнем дивності, у деяких аспектах — наприклад, у способах виводу символів — INTERCAL досі залишається неперевершеною. Її референс-мануал сам по собі є окремим мистецьким твором: на відміну від сучасних мов, які фокусуються на змісті команд, тут важливі буквальні, часто гротескні описи, і для майже кожного елемента мають спеціальні імена.
Щодо синтаксису INTERCAL, є багато чого обговорити. Але найвидатніші особливості такі:
Програміст має використовувати у коді слова на кшталт “PLEASE”, “DO”, “PLEASE DO”, “PLEASE GIVE UP” тощо.
Причому кількість вживань слова “PLEASE” має бути певною. Інакше компілятор видасть помилку типу:
“Програміст надто ввічливий” або “Програміст недостатньо ввічливий”.
INTERCAL є одновимірною мовою, що сильно обмежує можливості її використання.
ASCII-символи у коді мають незвичні назви: наприклад, знак рівності “=” називається півсіткою (half mesh), а менше “<” — кутом (angle).
INTERCAL — це справжній виклик для будь-якого програміста й яскравий приклад того, як програмування може перетворитися на іронічне мистецтво.



Malbolge
Malbolge — це мова програмування, навмисно створена як надзвичайно складна для розробників. Її винайшов Бен Олмстед у 1998 році, надихаючись «Божественною комедією» Данте: саме дев’яте коло Пекла носить назву Malbolge (Malebolge — “злі рови”).
Олмстед свідомо розробив Malbolge з заплутаним синтаксисом і набором інструкцій, які повністю суперечать інтуїції. Це зробило мову однією з найзагадковіших, найнепередбачуваніших і найзаплутаніших у світі програмування.
Написати навіть просту програму на Malbolge — справжній подвиг. Ця мова часто сприймається як психологічний тест або жарт над програмістами, і саме цим завоювала своє культове місце серед езотеричних мов.


Ця програма виводить “Hello, World!”, коли її виконати в інтерпретаторі Malbolge. Варто зазначити, що зрозуміти, як вона працює — надзвичайно складно, адже Malbolge навмисно створена максимально заплутаною.
Синтаксис Malbolge настільки складний і непрозорий, що на створення навіть простої програми для виводу “Hello, world” пішло два роки! І це стало можливим лише завдяки спеціальному скрипту, написаному мовою Lisp, який автоматично підібрав правильну комбінацію символів.
Не дивно, що Олмстед дав своїй мові саме таку назву — на честь найтемнішого й найстрашнішого кола Пекла. Malbolge — це виклик, в якому інтуїція програміста не просто не допомагає, а працює проти нього.
Whitespace
Whitespace — езотерична мова програмування з надзвичайно оригінальним і парадоксальним синтаксисом, яку створили Едвін Брейді та Кріс Морріс у 2002 році в Університеті Дарема. Цікаво, що 1 квітня 2003 року сайт Slashdot опублікував огляд цієї мови — у стилістиці першоквітневого жарту. А ще раніше, жартівлива ідея використовувати пробіли як оператори в C++ була озвучена самим Б’ярне Страуструпом — творцем C++. У Whitespace дозволені лише три символи:
пробіл (space)
табуляція (tab)
перехід на новий рядок (linefeed / Enter)
Інші символи — повністю ігноруються. Тобто код на цій мові є візуально порожнім або “невидимим” — читати його в текстовому редакторі майже неможливо.
Ця особливість породжує феноменальну “побічну перевагу”:
Програми на Whitespace можна приховувати всередині коду на будь-якій іншій мові (наприклад, C++), і знайти цей код буде неймовірно важко. Це перетворює Whitespace на не лише езотеричну, а й умовно стеганографічну мову.

Коли вихідний код на Whitespace відображається в деяких браузерах або редакторах, горизонтальні відступи, створені символом табуляції (tab), не завжди фіксовані — їхня ширина залежить від розташування символу в тексті відносно наступної табуляційної позиції.
Більше того, залежно від налаштувань програмного забезпечення, символи табуляції можуть автоматично замінюватися на змінну кількість пробілів. Це може призвести до пошкодження або спотворення коду, оскільки для Whitespace важливе точне розрізнення між пробілами, табами й переносами рядків. Будь-яке випадкове перетворення одного символу в інший — і програма перестає працювати належним чином.
Це робить написання і редагування коду на Whitespace ще більш викликовим і підкреслює його езотеричну природу.
Brainfuck
Brainfuck — це езотерична мова програмування, відома своїм мінімалізмом та екстремально простою структурою. Вона була створена у 1993 році Урбаном Мюллером як своєрідний експеримент у сфері простоти синтаксису.
Мова працює з масивом осередків пам’яті, які спочатку заповнені нулями, та вказівником, що вказує на поточну комірку. Brainfuck має всього 8 команд, кожна з яких представлена одним символом:
: перемістити вказівник на наступну комірку
< : перемістити вказівник на попередню комірку
+ : збільшити значення в поточній комірці
– : зменшити значення в поточній комірці
. : вивести значення поточної комірки як символ
, : зчитати один байт вводу й зберегти в поточну комірку
[ : якщо значення в комірці дорівнює нулю — перейти вперед до команди після відповідної ]
] : якщо значення в комірці не дорівнює нулю — повернутися назад до команди після відповідної [
Попри простоту, Brainfuck є повноцінно Турінг-повною мовою, тобто здатна виконати будь-який обчислюваний алгоритм. Проте писати програми на ній — справжній виклик: через відсутність звичних конструкцій управління, умов та імен змінних, код виглядає як зашифрований набір символів.
Brainfuck часто використовують у:
навчальних цілях (демонстрація принципів машинної логіки),
змаганнях з “code golf” (написання найкоротших програм),
та просто як інтелектуальну забаву для розробників.

Синтаксис Malbolge настільки складний і заплутаний, що на написання скрипту, який просто виводить “Hello, world!”, пішло два роки! Причому цей код (який, до речі, може виглядати по-різному через різноманітність способів реалізації) вдалося отримати лише завдяки програмі, написаній на Lisp, яка автоматично підібрала правильну комбінацію символів.
Не дивно, що Олмстед назвав своє творіння саме так — на честь одного з найтемніших кіл Пекла в “Божественній комедії” Данте. Malbolge — це справжня головоломка для програміста, у якій інтуїція та логіка швидше заважають, ніж допомагають.
Befunge
Befunge — це езотерична мова програмування, але, як і всі попередні приклади, вона має конкретний список правил, яких користувач повинен дотримуватися під час написання коду на Befunge.
Поле програми — це двовимірний тор; фізично воно є прямокутною матрицею символів-команд, замкнутою по верхній (нижній) межі та по лівій (правій) колонці.
Вказівник команди переміщується по полю (кожна команда — це символ із координатами x, y), виконує команду і рухається далі. Переміщення можливе у всіх чотирьох напрямках (за замовчуванням — вправо від точки 0,0), а при виході за межі “поля” вказівник з’являється на протилежній стороні.
Мова має дві команди (p, g), які дозволяють змінювати саме поле, тобто програма “переписує себе” під час виконання. Початковий код програми може відрізнятися від кінцевого.
Кріс Прессі, творець Befunge, зазначав, що хотів створити мову, яку буде якнайважче скомпілювати. І, фактично, йому це вдалося.
Користувач має поле, що складається з 25 рядків по 80 символів кожен. Оригінальна версія Befunge 1993 року містить 36 команд, кожна з яких представлена символом ASCII. Ось кілька прикладів:
< — перемістити курсор вліво;
— перемістити курсор вправо;
^ — перемістити курсор вгору;
v — перемістити курсор вниз;
@ — кінець програми;
& — запитати користувача про число і помістити його у стек; тощо.
Ось приклад коду для обчислення послідовності Фібоначчі на Befunge:

Часті запитання (FAQ)
Езотерична мова програмування, або просто езомова (esolang), — це мова, створена для експериментальних або розважальних цілей. У більшості випадків езомови не призначені для повсякденного програмування чи інженерної роботи.
INTERCAL була створена у 1972 році як пародія. Вона містила основні риси мов програмування того часу, але водночас була надзвичайно складною та обмеженою у використанні.
Whitespace — це езотерична мова програмування, синтаксис якої складається лише з пробілів, табуляцій і символів переходу на новий рядок, що робить код повністю нечитаємим.
Infosoft — це команда ІТ- та QA-інженерів. Ми надаємо компаніям технічних спеціалістів і експертизу в розробці продуктів, допомагаючи створювати програмне забезпечення світового рівня. Ви можете в будь-який момент розширювати або скорочувати свою віддалену команду розробників — без будь-яких фінансових ризиків.