Начиная с 70-х годов программисты постоянно придумывают языки программирования, на которых пишут код в формате пиксельных картинок, рецептов и даже пьес Шекспира. Их называют эзотерическими. Собрали самые яркие примеры в этой подборке.
Странные
Цель странных (weird) языков — создать альтернативный код, как можно более отличающийся от своих практичных и распространенных братьев. В качестве пародии на классические языки в 1972 году американские студенты Дон Вудс и Джеймс Лайон создали первый эзотерический язык INTERCAL (Compiler Language With No Pronounceable Acronym — «язык программирования с непроизносимой аббревиатурой»).
Вудс и Лайон хотели создать язык, на котором было бы очень сложно или вовсе невозможно программировать, и добились своего. Даже самые простые операции в INTERCAL заставят кодера попотеть. Язык использует метод вывода строк «лента Тьюринга», в котором массив чисел обрабатывается слева направо по одному символу за раз. Некоторые команды блокируют выполнение последующих команд или изменения переменных в коде. Визитная карточка INTERCAL — это модификатор PLEASE, который не несет никакой смысловой нагрузки, но должен встречаться в коде четыре или пять раз. Если вы используете PLEASE меньше трех раз, программа выдаст ошибку «Программист недостаточно вежлив», если больше пяти — «Программист слишком вежлив».
Пример кода для Hello,World на языке INTERCAL:
INTERCAL запустил традицию создания странных и экспериментальных языков, которую подхватили другие программисты. Например, в 1998 году превзойти INTERCAL по невыносимости решил Бен Олмстад. Он изобрел язык Malbolge, который назвал в честь восьмого круга ада из «Божественной комедии» Данте. Пожалуй, само название говорит о сложности языка лучше всего.
Читайте также: Какие языки программирования нужны в IT?
Минималистичные
Минималистичные языки создавали с целью получить функциональный код за счет наименьшего количества команд. Самый знаменитый язык в этой категории, Brainfuck (1993, автор Урбан Мюллер), насчитывает всего 8 команд:
< — «сдвинуть указатель на предыдущую ячейку»;
> — «сдвинуть указатель на следующую ячейку»;
+ — «увеличить значение текущей ячейки на 1»;
— — «уменьшить значение текущей ячейки на 1»;
. — «вывести значение текущей ячейки»;
, — «считать значение текущей ячейки»;
[ — «начало цикла, который выполняется, пока текущая ячейка не ноль»;
] — «конец цикла. Если значение текущей ячейки не ноль, перейти назад по тексту программы на символ [».
В теории Brainfuck можно использовать для программирования любых алгоритмов, но для реальных задач он непригоден. Чтобы пользоваться им для простейших операций, необходимо провести большую подготовительную работу, внести в память массивы значений, десятки раз повторить приращение ячеек. В общем, Brainfuck («вынос мозга») справедливо считается языком для техномазохистов.
Пример программы Hello, World на языке Brainfuck:
Среди других минималистичных языков — OISC, который содержит только одну команду, и Lazy K, в котором используются только символы S, K и I, а единственным оператором выступает символ `.
Концептуальные
Некоторые языки программирования разрабатывают, чтобы показать новые концепции дизайна кода. Они все еще могут быть намеренно непрактичными, зато удивляют. Классический пример — Befunge, разработанный Крисом Пресси в 1993 году. Целью разработки было создать язык, максимально сложный для компиляции (перевода с языка программирования на язык машинного кода).
От других языков Befunge отличается тем, что программы располагаются в двухмерной сетке, которая сшита по краям. В оригинальном Befunge 93-го года доступны 80 инструкций по горизонтали и 25 инструкций по вертикали. Интерпретатор может двигаться по сетке вверх, вниз, вправо и влево, выполняя команды в ячейках.
Программа Hello, World! на языке Befunge:
Если вы хотите освоить понятный и востребованный язык — посмотрите вебинар «Как стать разработчиком на Python и устроиться на работу мечты»
Тематические
Выйти за пределы компьютерной тематики программисты пытались уже не раз. Существуют, например, языки программирования, которые пишут код в виде кулинарных рецептов или пьес Шекспира.
Язык Shakespeare создали в 2001 году студенты Калле Хассельстрём и Юн Ослунд в качестве учебного проекта по синтаксическому анализу. Переменные в языке Shakespeare задаются именами персонажей Шекспира (Ромео, Джульетта, Гамлет), части исходного кода обозначают актами и сценами. Прежде чем начать управление переменными, их нужно ввести в текст при помощи команды Enter, а чтобы вывести переменную — выполнить команду Exit. Так как все операции выполняются строками из Шекспира, программы на этом языке очень многословны.
Как выглядит программа Hello, World! на языке Shakespeare:
Смешные
Многие эзотерические языки, даже те, что притворяются осмысленными и сделанными с какой-то целью, на самом деле не более чем шутка или пранк. Например, один из диалектов Brainfuck, язык программирования Ook!, предлагает писать код исключительно словом Ook с разными интонациями (вопросительной, восклицательной, утвердительной).
Так выглядит Hello, World! на диалекте Ook:
Просто красивые
Язык программирования может выглядеть не только как пьеса, но и как абстрактная картина. Создать программу в визуальном формате предлагает язык Piet (назван в честь художника Пита Мондриана).
Программа на Piet выглядит как двухмерная картинка, которая состоит из цветных блоков пикселей. Всего в программе участвуют 20 цветных блоков, которые могут варьироваться по оттенку и яркости.
Командами в языке являются переходы к следующему блоку. Компилятор выбирает следующий шаг, анализируя разницу между соседними цветами.
Так выглядит Hello,World на языке Piet: