Согласно самым разным источникам, в мире существует от нескольких сотен до нескольких тысяч языков программирования. Правда, ЯП, с которыми реально имеют дело десятки и сотни тысяч человек, немного. Больше, конечно, нишевых языков, применяемых для решения узкого круга задач. Существуют ЯП для обучения разработчиков, а также проекты, созданные исключительно для развлечения. В статье — 5 наиболее странных языков из когда-либо созданных. Brainfuck, кстати, опустим, ведь его на Хабре и так регулярно вспоминают. Что же, поехали.
Malbolge
Это если не самый, то один из наиболее сложных языков программирования в мире. Собственно, уже его название происходит от Malebolge, восьмого круга ада по Данте. Язык — эзотерический, для троичной виртуальной машины.
«Эзотерический» означает вовсе не «выход в астральные миры» при помощи программирования. Нет, в случае разработки этот термин означает, что ЯП создан для исследования границ возможностей других языков. Эзотерические языки применяются для доказательства потенциально возможной реализации некой идеи.
На практике эти языки бесполезны, но некоторые можно использовать для тренировки. Конечно, всё это тоже условно, поскольку есть, например, язык, построенный на трёх символах — пробел, табуляция и конец строки. Что и как с его помощью можно тренировать?
Но вернёмся к Malbolge. Общеизвестный факт, что даже его создатель так ничего и не смог написать на этом ЯП. Для создания очень простой программы Hello, World пришлось разработать другую программу, которая и смогла выполнить эту задачу.
Сейчас есть несколько облегчённая версия языка, которая называется Dis. Также создан и Тьюринг-полный «диалект», который называется Malbolge Unshackled. Он ещё сложнее оригинала, гораздо сложнее.
Неплохо, правда?
Whitespace
Об этом ЯП немного рассказано выше — в моменте про пробелы, табуляции и переносы строк. На самом деле это ещё один эзотерический язык, который можно назвать «шпионским». Всё потому, что код, написанный на нём, можно скрывать в тексте других ЯП. Таким образом, решается задача невидимости и маскировки кода, что открывает новые горизонты для разработчиков.
В отличие от предыдущего языка, Whitespace можно использовать на практике. Например, в обычном коде традиционного ЯП можно скрыть сообщение для коллеги или кого угодно. Поскольку сообщение будет состоять лишь из невидимых знаков, которые обычно игнорируются при чтении кода, то обнаружить его непросто.
Уникальность ЯП как раз в том, что его можно встраивать, не мешая функциональности программы-носителя. Whitespace можно применять для разработки пасхалок или исследований в информационной безопасности. Либо же просто применять его just for fun.
Можно рекомендовать основы языка для изучения, чтобы, если так можно выразиться, расширить собственные горизонты.
Chef
Ещё один весьма странный язык. Его можно рекомендовать тем разработчикам, кто одновременно является и гурманом. Дело в том, что переменные здесь обозначаются названиями реальных кухонных продуктов. А код на Chef выглядит как рецепт. Вероятно, если его увидит даже не обычный пользователь, а опытный разработчик, он подумает, что это рецепт. Если не верите, то вот код, написанный на этом ЯП:
В этом ЯП используются следующие понятия:
- ингредиент — переменная. Название ингредиента задаёт её имя, количество — значение, а консистенция (сухой или жидкий) — тип при выводе на печать (число или ASCII-код)
- миски и формы для выпечки — стеки, в которых хранятся целочисленные значения. Над значениями в стеках-мисках производятся все действия; формы для выпечки служат для вывода их содержимого на печать. Запас мисок и форм неограничен; если их используется несколько, на них ссылаются по их номерам («первая миска»)
В общем, вот такой вкусный язык программирования. Может, кто уже «готовил» с его помощью? Расскажите, как он вам?
INTERCAL
Это язык для тех, кому по душе вежливость. Дело в том, что код содержит большое количество ключевых слов вроде DO (ВЫПОЛНЯЙ), PLEASE (ПОЖАЛУЙСТА) или PLEASE DO (ПОЖАЛУЙСТА, ВЫПОЛНЯЙ). При этом обойтись без вежливости нельзя — по правилам ЯП от трети до пятой части инструкций из кода должны содержать «признаки вежливости».
Кстати, INTERCAL обладает Тьюринг-полнотой, поэтому, если есть время, можно писать прикладные программы. Уже есть наработки — к примеру, веб-фреймворк на основе INTERCAL с командами типа ick (компилирует код) и gross (запускает сервер). За несколько лет существования у языка появилось большое сообщество, представители которого создают приложения и дорабатывают язык. Например, не так давно появились новые команды COME FROM и DO COME FROM.
Ещё одна особенность языка в том, что любой команде можно задать вероятность выполнения, а некоторые операторы блокируют выполнение других команд или запрещают изменять переменные.
Язык непростой, ещё одно его качество — запутанность. Вот, например, код, который позволяет сохранить значение 65536 в 32-битной переменной:
Получается, что, кроме вежливости, этот ЯП можно использовать для написания сложного для понимания кода — если постараться, его не поймёт и опытный разработчик. В документации, кроме отсылок к «Алисе в Стране чудес», говорится ещё и следующее: «INTERCAL позволяет программисту генерировать в 20 раз больше кода, чем большинство других языков. Благодаря этому разработчик становится гораздо более плодовитым, чем его коллеги, вынужденные программировать на лаконичных языках. А ещё программирование займёт у вас гораздо больше времени».
Shakespeare
Язык программирования для гурманов уже есть, а теперь очередь для ЯП, который понравится любителям поэзии. Shakespeare — эзотерический язык, который всегда маскирует свой код под труды Шекспира. Так, первый абзац программы — эпиграф, список персонажей — это количество стеков, а реплики участников действа — операции ввода-вывода.
Если кто-то из персонажей задаёт вопрос, то в дело вступает условный оператор. Отдельные блоки программы — акты, которые разбиваются на сцены. Ну и для того чтобы понять, как всё это выглядит на практике, приведём пример кода:
Эзотерических языков сейчас много, а их количество продолжает увеличиваться. Если есть интерес к изучению таких языков, вот вики, где включены если не все, то большинство подобных ЯП. Это весьма объёмный ресурс, так что будьте осторожны — можно утонуть во всей этой информации. Не говорите, что мы не предупреждали.