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

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

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

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

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

    А вы когда-нибудь использовали эзотерические ЯП?

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    • +5
    • 13,1k
    • 2
    Университет ИТМО 185,52
    IT's MOre than a University
    Поделиться публикацией
    Комментарии 2
    • 0
      Более того, появлось все больше «смежных областей», в рамках которых программирование перестало быть самоцелью и стало способом решения той или иной профильной задачи.

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

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


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

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


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

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

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


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

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое