Магия или коды: что такое эзотерические языки программирования и зачем их создают
Эзотерика и программирование - кажется, что эти понятия находятся максимально далеко друг от друга. Или нет? Ольга Максименкова, доцент департамента программной инженерии факультета компьютерных наук НИУ ВШЭ, рассказала о том, что такое эзотерические языки программирования, какими они бывают и как создать свой.
Эзотерические языки программирования (ЭЯП) — это особая категория языков, которые разработаны не для промышленных целей, а, например, для исследования границ возможностей разработки или проверки, можно ли реализовать некоторую идею. К ЭЯП также относят языки — произведения искусства или «шутки» — по аналогии с «шутками» и «фантазиями» великих композиторов. Например, «Шутка» Баха из Сюиты № 2 написана в легкой и озорной манере: такого Баха средний слушатель практически не знает. Современные композиторы, такие как Майк Олдфилд или Жан-Мишель Жар пошли дальше и фактически исследовали границы искусства, объединяя и сочетая казалось бы несочетаемые вещи: народные, классические и электронные инструменты, свет и цвет (вслед за Скрябиным, конечно). Послушайте, например, ставший культовым альбом Олдфилда Tubular Bells.
Нельзя сказать, что есть «обычные» языки программирования, а есть необычные – эзотерические. Все ЯП могут классифицироваться по-разному: они бывают низкого (Ассемблер) и высокого уровня (Python), или, например, допускающие безопасное и небезопасное управление памятью. Основной критерий, который определяет эзотеричность языка программирования довольно субъективен – это уровень доведения до абсурда отдельных идей, свойств или ограничений, что делает такие языки непригодными для массовой продуктовой разработки.
Цели создания ЭЯП напрямую следуют из их определения. Мы знаем ЭЯП, созданные для подтверждения или опровержения концепций, и те, которые были созданы в целях высокого искусства программирования. В таких случаях ЯП выступает средством художественной выразительности, показателем уровня мастерства художника, программиста или разработчика формальных языков. Например, существует язык Shakespeare, программа на котором выглядит как стихотворное произведение в стиле пьесы Уильяма Шекспира, где команды выражены обращениями одного персонажа к другому.