В первой части нашего рассказа об эзотерических языках мы попытались классифицировать их по разным параметрам — от литературных и кинематографических «отсылок», заложенных в синтаксис, до полноты по Тьюрингу. Сегодня о предназначении эзотерических языков программирования.

В конце концов, понимание целей, которые ставит перед собой создатель того или иного языка, как минимум может дать почву для размышлений тем из программистов, кто сам захочет в будущем сделать нечто подобное и разработать свой уникальный язык.

Фото hackNY.org CC BY

Немного философии


Существует мнение, что одной из причин появления эзотерических языков стала сама история программирования. С момента появления эта сфера прошла путь своего рода «десакрализации»: разработка постепенно перестала быть закрытой и очень специфической областью знаний.

Более того, появлось все больше «смежных областей», в рамках которых программирование перестало быть самоцелью и стало способом решения той или иной профильной задачи.

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

Здесь, пожалуй, особенно примечателен Malbolge и другие языки «черные ящики» — пожалуй, они решают эту «культурологическую» задачу наилучшим образом.

Зарядка для ума


Еще одна задача (которую чаще всего ставят перед собой создатели эзотерических языков) — стимуляция нестандартного мышления, попытка решить те или иные вопросы нетривиальным способом. По сути, создание эзотерического языка и написание программ на нем может быть просто «головоломкой», однако это — еще и отличная возможность лучше понять, как «работает» машина Тьюринга, на практике разобраться в теории вычислимости и теории алгоритмов.

Кроме того, это — хороший способ ненадолго отвлечься от «серьезного» программирования. Именно с такой целью обычно создаются шуточные эзотерические языки. В конце концов, как говорит Арне Мартин Аурлин (Arne Martin Aurlien), разработчик из Норвегии, выступавший (видео) с этой темой на JSConf EU, «во многих из нас сидит befunge-программист, который ждет момента вырваться на свободу».

Код как искусство


Эзотерические языки программирования часто сравниваются с произведениями искусства — как литература или музыка, они в меньшей степени связаны с «чистой функциональностью» и намного больше — с выражением мыслей и оригинальных идей их авторов. Точно так же, как «традиционное искусство» они непрактичны, поэтому несут в себе другую ценность — например, служат иллюстрацией существенных различий между человеческим мышлением и «машинной» логикой или же, наоборот, предлагают уникальные способы коммуникации с машиной. То есть, как выразились в Apifonica, «представляют собой программирование в его наиболее абстрактной форме», позволяя разработчикам проявить творческое начало вне рамок и условностей.

Это хорошо, но используются ли эзотерические языки на практике?


Существуют прямо противоположные мнения относительно целей и «применимости» эзотерических языков программирования. Кто-то считает, что «практическая применимость» и «эзотерические языки» — понятия несовместимые. В этом случае эзотерические языки программирования — не более, чем «эксперименты», которые существуют по той же причине, по которой выпускаются кроссворды и паззлы — чтобы «размять мозги».

С другой стороны, эзотерические языки, несмотря на сложность практического применения, все же могут быть полезными. Например, несут в себе обучающие и иллюстративные функции. Они позволяют представить ту или иную идею в гипертрофированном виде — и при этом максимально наглядно. Например, помогают проиллюстрировать, как полноте по Тьюрингу могут сопутствовать слабые «выразительные возможности ЯП» — на примере любой тьюринговской трясины.

Однако существуют и кейсы вполне реального практического использования эзотерических языков. Например, мини-игра Lost Kingdom на Brainfuck. По словам ее автора, Джона Рипли (Jon Ripley), Lost Kingdom, скорее всего, самая большая программа, написанная на этом языке.

Случай, конечно, редкий, но не уникальный. В тематическом треде на Quora пользователи делятся кейсами работы с эзотерическими языками. Иногда их, к примеру, используют в образовательных целях. В этих случаях полезными качествами оказываются «головоломность» и определенная степень абстракции, позволяющая выделить те или иные характеристики.

Конечно, сталкиваться с «настоящими» эзотерическими языками программирования «по профессии» не приходится практически никому. Когда речь идет о работе, под эзотерическими языками понимаются скорее редкие и необычные, синтаксис которых сильно отличается от популярных ЯП — речь точно не идет о наиболее известных эзотерических ЯП, созданных для развлечения.

Тихон Джелвис (Tikhon Jelvis), ведущий специалист по данным в Target, рассказывает, что использовал среду разработки ArrayForth — и опыт работы с ней кажется ему наиболее «эзотерическим» в его практике. Например, цвет в ArrayForth — это тоже элемент синтаксиса.

Правда, ArrayForth действительно используется во вполне серьезных целях — как среда разработки для процессоров GreenArrays. Это, однако, не лишает его массы особенностей, свойственных более необычным собратьям. У него, кстати, есть даже «официальный эзотерический» родственник — язык BogusForth.

«Программирование в ArrayForth — словно попадание в другое измерение. Это технология, которая отделилась от «обычных» языков лет 40 назад. С тех пор развивается по собственному пути вокруг своего маленького — но на удивление преданного — сообщества»

Зачем нужны такие языки, и почему это не всегда «упражнение ради упражнения»? Если рассматривать язык как ограниченную систему, обеспечивающую взаимодействие между человеком и машиной, можно утверждать, что эзотерический язык — это, своего рода, возможность расширить наше понимание свойств и потенциальных возможностей такого взаимодействия. Странный синтаксис, «безумная» логика просто дают нам еще один пример того, как может строиться работа с машиной.

Часть из таких языков может служить не просто иллюстрацией, но и примером того, что будет, если ту или иную концепцию довести до абсурда, другая часть реализует вполне конкретные, пусть и не всегда практически полезные (для большинства) цели и задачи, еще некоторое количество эзотерических языков — это чистое искусство. Которое (как и любое произведение искусства) можно и нужно изучать — в том числе для того, чтобы попробовать выйти за рамки привычного программирования.

Список на вики-портале Esolang насчитывает 1236 существующих эзотерических языков — и новые продолжают появляться каждый год. Возможно, как пишет Митчелл Джонсон (Mitchell Johnson) из Atomic Object в своем эссе, нам стоит меньше задаваться вопросом «Почему появляются эзотерические языки программирования?». Ответ на него, чаще всего, звучит так: «Потому что…почему бы и нет».

О чем еще мы пишем на Хабре:

Комментарии (2)


  1. third112
    05.01.2018 17:48
    -1

    Более того, появлось все больше «смежных областей», в рамках которых программирование перестало быть самоцелью и стало способом решения той или иной профильной задачи.

    А когда программирование было самоцелью? Можно пару примеров?

    Точно так же, как «традиционное искусство» они непрактичны


    В отношении традиционного искусства (ТИ) – спорное утверждение. ТИ практично, начиная с наскальной живописи: все мужики в племени идут с дубинами на мамонта, кроме одного – тот их подвиги на стенке пещеры изобразит. За это получит лучший кусок мяса, т.к. героям-охотникам приятно видеть себя увековеченными, а женщины и дети, которые не были на охоте, проникаются к героям уважением. Очень практично. Позже короли и полководцы за большие деньги свои портреты заказывали…

    Однако существуют и кейсы вполне реального практического использования эзотерических языков.


    А зачем статью на таком эзотерическом языке писать? Можно ведь выразится и круче: Хавевер экзистентны и кейсы риал-практикал юзинга. Трушная жесть!

    По применению esolang уже спрашивал в предыдущей части статьи:

    в публикациях по защите ПО часто упоминается защита с помощью эзотерических ЯП. ИМХО было бы практически очень полезным сделать в классификации подкласс практически полезных ЯП для черных ящиков. И внести в список не один BANCStar. Наверное, есть лит.источники, где приводятся соответствующие крипто-оценки эзотерических ЯП и оценки возможности практического применения?


    Ответа там не получил – интересно, ответит ли автор здесь?


  1. Bookvarenko
    06.01.2018 08:51

    Могу только набросить язык «Штурман» для программирования грузового НЛО в квадратном космосе.
    instead-games.ru/game.php?ID=268