Код
#подборки

Камасутра для влюблённых в код: топ-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:

DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
PLEASE DO ,1 SUB #7 <- #48
DO ,1 SUB #8 <- #26
DO ,1 SUB #9 <- #244
PLEASE DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP

Всё как и обещано в документации: «INTERCAL позволяет программисту генерировать в 20 раз больше кода, чем большинство других языков. Благодаря этому разработчик становится гораздо более плодовитым, чем его коллеги, вынужденные программировать на лаконичных языках. А ещё программирование займёт у вас гораздо больше времени».

Где изучить INTERCAL: http://www.catb.org/~esr/intercal/ick.htm.

False — самый вдохновляющий

Созданный в 1993 году False запустил волну массового интереса к esolang. Проектируя False, создатель языка Ваутер ван Ортмерссен стремился запутать всех сложным синтаксисом и сделать максимально мощный язык с компилятором весом в 1 килобайт.

False — довольно практичный esolang, на котором можно решать прикладные задачи, а под капотом у него есть все базовые арифметические и логические операции. Из особенностей: переменные обозначаются одной строчной латинской буквой, конструкция if записывается как ? , while — #.

Вот пример программы, которая выводит простые числа от 0 до 100:

{ writes all prime numbers between 0 and 100 }
99 9[1-$][$@$@$@$@/*=[1-$$[%1-$@]?0[$.' ,]?]?]#

Где изучить 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 — посмотрите, как в одном «произведении» лихо миксуются фразы Джульетты, Ромео, Гамлета и Офелии.

Пример кода на языке

Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Prince Hamlet, the flatterer of Andersen Insulting A/S.
                   
Act I: Hamlet's insults and flattery.
Scene I: The insulting of Romeo.
[Enter Hamlet and Romeo]

Hamlet:
You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself! Speak your mind!

You are as brave as the sum of your fat little stuffed misused dusty old rotten codpiece and a beautiful fair warm peaceful sunny summer's day. You are as healthy as the difference between the sum of the sweetest reddest rose and my father and yourself! Speak your mind!

You are as cowardly as the sum of yourself and the difference
between a big mighty proud kingdom and a horse. Speak your mind.
Speak your mind!

[Exit Romeo]

Scene II: The praising of Juliet.
[Enter Juliet]

Hamlet:
Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind!

[Exit Juliet]

Scene III: The praising of Ophelia.
[Enter Ophelia]

Hamlet:
Thou art as lovely as the product of a large rural town and my amazing bottomless embroidered purse. Speak thy mind!

Thou art as loving as the product of the bluest clearest sweetest sky and the sum of a squirrel and a white horse. Thou art as beautiful as the difference between Juliet and thyself. Speak thy mind!

[Exeunt Ophelia and Hamlet]

Act II: Behind Hamlet's back.
Scene I: Romeo and Juliet's conversation.
[Enter Romeo and Juliet]

Romeo:
Speak your mind. You are as worried as the sum of yourself and the difference between my small smooth hamster and my nose. Speak your mind!

Juliet:
Speak YOUR mind! You are as bad as Hamlet! You are as small as the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece. Speak your mind!

[Exit Romeo]

Scene II: Juliet and Ophelia's conversation.
[Enter Ophelia]
Juliet:
Thou art as good as the quotient between Romeo and the sum of a small furry animal and a leech. Speak your mind!

Ophelia:
Thou art as disgusting as the quotient between Romeo and twice the difference between a mistletoe and an oozing infected blister! Speak your mind!

[Exeunt]

И пусть программировать цитатами из Шекспира — не самое комфортное занятие, зато Shakespeare отлично разминает мозг и даёт возможность развить чувство прекрасного :)

Где изучить Shakespeare: http://shakespearelang.sourceforge.net/.

Piet — самый красочный

Вот где термин «визуальное программирование» раскрывается по полной: в Piet вместо текста используются разноцветные изображения, похожие на творения абстракционистов. Собственно, даже название языка — отсылка к имени нидерландского художника Пита Мондриана.

Вот одно из его творений (его нельзя компилировать — это просто картина):

Пит Мондриан. «Композиция с красным, жёлтым и синим» (1921)

В Piet есть 20 цветовых блоков различных оттенков и яркости. Вот они:

Листинг программ — последовательность таких разноцветных блоков. Так выглядит Hello World:

Вот ещё один — более изящный — вариант этой программы:

А такой разноцветный родственник QR-кодов выводит первые 100 чисел Фибоначчи:

Среди ценителей Piet особым шиком считается «написать» максимально симметричный и миниатюрный «код».

Сколько эзотерических языков в мире

На самом деле эзотерических языков в мире уже тысячи, а у поклонников этого направления в программировании есть даже собственная вики. В ней собраны практически все известные esolang. И только на то, чтобы его пролистать (даже не прочитать), понадобится несколько минут. А если на каждый потратить хотя бы минуту времени, то, как в расхожей легенде о Третьяковке, закроете браузер вы только через 11 лет :)

Чтобы войти в программирование, рекомендуем не… ломать мозг, а начать с более востребованных и практичных языков — например, Java или Python. Подходящий курс можно выбрать в разделе «Программирование» Skillbox.

Учись бесплатно:
вебинары по программированию, маркетингу и дизайну.

Участвовать
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована