Большинство языков стараются сделать код ясным машине и человеку. Эзотерические языки переворачивают эту цель: они превращают программу в головоломку, литературный текст или картину. При этом за странным видом скрываются реальные правила исполнения, переменные, циклы и вывод результата.
| Место | Участник рейтинга |
|---|---|
| 5 | INTERCAL |
| 4 | LOLCODE |
| 3 | Shakespeare Programming Language |
| 2 | Chef |
| 1 | Piet |
5. INTERCAL

INTERCAL появился в 1972 году как пародия на тогдашние языки и их претензии на универсальность. Его полное название намеренно разрастается до абсурдной формулы, а документация с невозмутимым видом объясняет искусственные ограничения. Среди узнаваемых особенностей – оператор PLEASE: программа может требовать «вежливые» команды, но чрезмерное число просьб тоже способно сделать её подозрительной.
За шуткой остаётся интерпретатор и определённая модель вычислений. Автор программы сталкивается с необычным синтаксисом и намеренно усложнёнными конструкциями, поэтому читать код приходится как загадку. INTERCAL не стремится заменить Python или C: это сатирический эксперимент над представлением, будто удобство и очевидность всегда автоматически ведут к хорошему языку.
4. LOLCODE

LOLCODE вырос из интернет-мемов с котами и нарочитой грамматикой. В нём встречаются слова вроде HAI для начала программы, KTHXBYE для завершения и I HAS A для объявления переменной. Человек, привыкший к строгим скобкам, поначалу видит не язык, а комический чат.
Однако у LOLCODE есть версии спецификации и реализации, а его простая лексика скрывает вполне узнаваемые действия: вывести строку, запросить ввод, вычислить выражение и перейти по условию. Язык одновременно служит игрой с культурой мемов и способом показать, насколько много в программировании зависит от условностей. Синтаксис может быть неожиданным, но интерпретатору всё равно нужны точные правила.
3. Shakespeare Programming Language

В Shakespeare Programming Language программа оформляется как пьеса. Персонажи становятся переменными, сцены – блоками, а реплики и ремарки управляют вычислениями. Настроение персонажей может задавать значения, а диалог между ними – передавать данные. Автор намеренно подражал структуре шекспировской драмы, так что листинг способен выглядеть как театральная страница.
Это не инструмент для сценического искусства и не способ превратить любой роман в исполняемый файл. У языка есть грамматика и интерпретаторы, но читать программу нужно одновременно как литературную форму и набор инструкций. Забавная идея заставляет внимательнее смотреть на роли: кто говорит, кому отвечает и каким образом реплика меняет состояние вычислений.
2. Chef

Язык Chef оформляет программы как рецепты. В исходнике есть название блюда, список ингредиентов и последовательность действий, похожая на приготовление. Ингредиенты выступают данными, миски и блюда – контейнерами, а шаги смешивания, нагрева и подачи соответствуют операциям. Цель дизайна – чтобы программы напоминали рецепты, которые человек мог бы прочитать и приготовить.
Сходство с кухней не только декоративное: последовательность операций и имена компонентов участвуют в структуре. Чем сложнее вычисление, тем более причудливо выглядит рецепт. Это одновременно языковая головоломка и комментарий к тому, как инструкции превращают сырьё в результат – будь то еда или значение в памяти компьютера.
1. Piet

В Piet исходный код – растровая картинка из цветных областей. Название отсылает к художнику Питу Мондриану, чьи геометрические композиции вдохновили автора. Интерпретатор перемещает указатель между областями, а смена цвета и размера блока выбирает команду. Чтобы выполнить программу, изображение нужно не читать строка за строкой, а пройти по его цветовым переходам.
Пиксельная графика делает важными границы областей и точный набор цветов. Небольшое изменение картинки может изменить маршрут исполнения. Программисту приходится думать о композиции и логике одновременно; результат выглядит как абстрактное искусство, пока не узнаешь правила перемещения. Piet особенно ясно показывает, что исходный код необязательно должен быть текстом.
Эти языки полезны не тем, что ускоряют повседневную разработку. Они показывают, насколько по-разному можно кодировать одну и ту же идею: через мем, театр, рецепт или цвет. Шутка становится программой в тот момент, когда её странные правила начинают безошибочно исполняться.
