5-минутный гид по эзотерическим языкам программирования: зачем они нужны

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

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

1fkyn0pkvehk3s2akebt0ddduti.jpegФото 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 в своем эссе, нам стоит меньше задаваться вопросом «Почему появляются эзотерические языки программирования?». Ответ на него, чаще всего, звучит так: «Потому что…почему бы и нет».

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

  • Неклассическое поступление в вуз
  • Как читать научные статьи: советы ученых
  • Когда программирование — это постоянная «учеба»

© Habrahabr.ru