Камасутра для влюблённых в код: топ-5 эзотерических языков программирования в примерах
От этих языков программистов охватывает трепет. Рассказываем про esolang — языки, придуманные не для работы, а для извращённых удовольствий.
Некоторые программисты не удовлетворены уже приевшимися Java, Python или C++ — в свободное время их неудержимо тянет к эзотерическим языкам программирования.
Эзотерические языки программирования, или esolang, разработали совсем не для работы: с их помощью исследуют границы возможного в программировании, обосновывают концепции, воплощают странные идеи, а ещё — просто развлекаются. Поэтому чаще всего эзотерические языки пародируют «настоящие» или воплощают абсурдные концепции авторов. И если создатели обычных языков программирования стараются сделать синтаксис максимально понятным, а программирование — удобным, то авторы esolang чаще всего поступают ровно наоборот.
В работе esolang абсолютно бесполезны, зато они неплохо тренируют ум и развивают смекалку. Поэтому их часто включают в программы чемпионатов по программированию. У них есть общее качество: текст программы понятен или «посвящённым», или вообще никому.
Мы собрали топ-5 самых-самых эзотерических языков и попытались разобраться, кому и зачем они нужны.
INTERCAL — самый первый
INTERCAL придумали два студента Принстонского университета, Дон Вудс и Джеймс Лайон, в 1972 году. Это пародийный язык, а его название означает «язык программирования с непроизносимой аббревиатурой». На главной странице INTERCAL висит грозное предупреждение:
«Осторожно! Если вы не злостный хакер, вам лучше сразу вернуться восвояси. Ничего, кроме извращённых технических глупостей и неумолимой одержимости высасыванием мозгов, вас здесь не ждёт. Что ж, вы предупреждены».
Документация языка пестрит эпиграфами из «Алисы в Стране Чудес» и ехидными комментариями, а коды ошибок невозможно расшифровать без справочника. Например, ошибка E127 — «Говорить „абракадабра“ без волшебной палочки совершенно бесполезно» — намекает, что стандартная библиотека не подключена. А E252: «Я забыл, что хотел сказать» — на переполнение памяти во время операций ввода-вывода.
Есть и уникальные для INTERCAL ошибки — например, E079: «Программист недостаточно вежлив». Или E099: «Программист слишком вежлив». Обе появляются, когда в коде слишком много или слишком мало вхождений команды PLEASE.
Каждой команде в INTERCAL можно задать вероятность выполнения, а некоторые операторы блокируют выполнение других команд или запрещают изменять переменные.
В общем, цель языка — сделать код максимально запутанным и непонятным, «скрыть любую информацию, чтобы вас не могли уволить и заменить каким-нибудь младшим помощником старшего подмастерья». Например, вот самый простой способ сохранить значение 65536 в 32-битной переменной:
DO: 1 <— # 0 $ # 256
Не переживайте, мы тоже мало что поняли. Но, как гордо заявляют авторы: «Если это самый простой способ, то представьте, что можно сделать, намеренно пытаясь скрыть информацию!»
А так выглядит классика — «Hello World» на INTERCAL:
Всё как и обещано в документации: «INTERCAL позволяет программисту генерировать в 20 раз больше кода, чем большинство других языков. Благодаря этому разработчик становится гораздо более плодовитым, чем его коллеги, вынужденные программировать на лаконичных языках. А ещё программирование займёт у вас гораздо больше времени».
Где изучить INTERCAL: http://www.catb.org/~esr/intercal/ick.htm.
False — самый вдохновляющий
Созданный в 1993 году False запустил волну массового интереса к esolang. Проектируя False, создатель языка Ваутер ван Ортмерссен стремился запутать всех сложным синтаксисом и сделать максимально мощный язык с компилятором весом в 1 килобайт.
False — довольно практичный esolang, на котором можно решать прикладные задачи, а под капотом у него есть все базовые арифметические и логические операции. Из особенностей: переменные обозначаются одной строчной латинской буквой, конструкция if записывается как ? , while — #.
Вот пример программы, которая выводит простые числа от 0 до 100:
Где изучить False: http://strlen.com/false-language/.
Brainfuck — самый известный и минималистичный
Создатель Brainfuck Урбан Мюллер был одним из тех, кого вдохновил False. «Вызов принят!» — подумал Урбан и решил сделать свой язык — более запутанный и с совсем крошечным компилятором. Удивительно, но у него получилось: некоторые компиляторы для Brainfuck весят менее 200 байт.
Brainfuck переводится на русский как «мозготр*х». В нём всего восемь команд, каждая из которых обозначается одним символом — плюсом, минусом, точкой и так далее. Исходный код программы на Brainfuck состоит из последовательности этих восьми символов без разделителей и отступов.
Кодить на Brainfuck настолько сложно, что его называют языком для мазохистов. Например, в нём нет условных операторов, операций умножения и деления в привычном для нас виде.
Вот так выглядит Hello World на Brainfuck — программа состоит из 389 команд!
Где изучить Brainfuck: http://www.muppetlabs.com/~breadbox/bf/.
Shakespeare — самый поэтичный
Этот esolang маскирует код под пьесы Шекспира. Первый абзац программы — всегда эпиграф, с помощью списка персонажей объявляют количество стеков, а реплики героев — это операции ввода-вывода. Если же шекспировские персонажи задают вопросы, включается условный оператор. Отдельные блоки программы называют актами, которые, в свою очередь, разбиты на более мелкие сцены, пронумерованные римскими цифрами.
Язык получился многословным. Вот так, например, выглядит запись «Hello World». Да уж, это сплошной the time is out of joint — посмотрите, как в одном «произведении» лихо миксуются фразы Джульетты, Ромео, Гамлета и Офелии.
Пример кода на языке
И пусть программировать цитатами из Шекспира — не самое комфортное занятие, зато Shakespeare отлично разминает мозг и даёт возможность развить чувство прекрасного :)
Где изучить Shakespeare: http://shakespearelang.sourceforge.net/.
Piet — самый красочный
Вот где термин «визуальное программирование» раскрывается по полной: в Piet вместо текста используются разноцветные изображения, похожие на творения абстракционистов. Собственно, даже название языка — отсылка к имени нидерландского художника Пита Мондриана.
Вот одно из его творений (его нельзя компилировать — это просто картина):
В Piet есть 20 цветовых блоков различных оттенков и яркости. Вот они:
Листинг программ — последовательность таких разноцветных блоков. Так выглядит Hello World:
Вот ещё один — более изящный — вариант этой программы:
А такой разноцветный родственник QR-кодов выводит первые 100 чисел Фибоначчи:
Среди ценителей Piet особым шиком считается «написать» максимально симметричный и миниатюрный «код».
Где изучить Piet: https://www.dangermouse.net/esoteric/piet.html.
Сколько эзотерических языков в мире
На самом деле эзотерических языков в мире уже тысячи, а у поклонников этого направления в программировании есть даже собственная вики. В ней собраны практически все известные esolang. И только на то, чтобы его пролистать (даже не прочитать), понадобится несколько минут. А если на каждый потратить хотя бы минуту времени, то, как в расхожей легенде о Третьяковке, закроете браузер вы только через 11 лет :)