Эзотерический язык программирования

Материал из wikixw
Перейти к навигации Перейти к поиску

Эзотерический язык программирования (иногда сокращенный до esolang) - это язык программирования, предназначенный для проверки границ дизайна языка программирования, в качестве доказательства концепции, как программное искусство, как хакерский интерфейс к другому языку (особенно функциональному программированию или процедурным языкам программирования) или как шутка. Использование слова эзотерический отличает их от языков, которые работающие разработчики используют для написания программного обеспечения. Создатели большинства эзолангов не предполагают, что они будут использоваться для основного программирования, хотя некоторые эзотерические функции, такие как визуально -пространственный синтаксис, вдохновили практическое применение в искусстве. Такие языки часто популярны среди хакеров и любителей.

Юзабилити редко является целью для разработчиков эзотерических языков программирования; часто их дизайн приводит к прямо противоположному. Их обычная цель состоит в том, чтобы удалить или заменить обычные языковые функции, сохраняя при этом язык, который является полным по Тьюрингу, или даже тот, для которого вычислительный класс неизвестен.

История[править]

Самым ранним и до сих пор каноническим примером эзотерического языка программирования является INTERCAL, разработанный в 1972 году Доном Вудсом и Джеймсом М. Лайоном, которые заявили, что их намерением было создать язык программирования, непохожий ни на один из тех, с которыми они были знакомы Он пародировал элементыизвестные языки программирования того времени, такие как Fortran, COBOL и assembly language.

В течение многих лет INTERCAL был представлен только бумажными копиями руководства INTERCAL. Его возрождение в 1990 году в качестве реализации на C под Unix стимулировало волну интереса к преднамеренному проектированию эзотерических компьютерных языков.

В 1993 году Ваутер ван Оортмерссен создал FALSE, небольшой стек-ориентированный язык программирования с синтаксисом, предназначенным для того, чтобы сделать код изначально запутанным, запутанным и нечитаемым. Его компилятор имеет размер всего 1024 байта. Это вдохновило Урбана Мюллера на создание еще меньшего языка, ныне печально известного Brainfuck, который состоит всего из восьми распознанных символов. Наряду с Befunge Криса Пресси (как FALSE, но с двумерным указателем инструкции), Brainfuck теперь является одним из наиболее поддерживаемых эзотерических языков программирования, с каноническими примерами минимальных тарпитов Тьюринга и излишне запутанными языковыми функциями. Brainfuck относится к семейству P"машин Тьюринга.

Примеры[править]

См. также: Список языков программирования по типу § Эзотерические языки

Befunge[править]

Befunge позволяет указателю инструкции перемещаться по коду в нескольких измерениях. Например, следующая программа отображает "Hello World", помещая символы в стек в обратном порядке, а затем печатая символы в цикле, который циркулирует по часовой стрелке через инструкции >, :, v, _, ,, и ^.

"dlroW olleH">:v
             ^,_@

Существует множество версий Befunge, наиболее распространенной из которых является Befunge-93.

Двоичное лямбда-исчисление[править]

Двоичное лямбда-исчисление разработано с точки зрения алгоритмической теории информации, чтобы обеспечить максимально плотный код с минимальными средствами, включая 29-байтовый самоинтерпретатор, 21-байтовое сито простых чисел и 112-байтовый интерпретатор Brainfuck.

Brainfuck[править]

Brainfuck предназначен для крайнего минимализма и приводит к запутанному коду, с программами, содержащими только восемь различных символов. Следующая программа выводит "Hello World!":

++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++
..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.

Шеф-повар[править]

Chef - это стек-ориентированный язык программирования, созданный Дэвидом Морганом-Маром, предназначенный для того, чтобы программы выглядели как кулинарные рецепты. Программы состоят из заголовка, списка переменных и их значений данных, а также списка инструкций по манипулированию стеком.[7] Шутливый принцип проектирования гласит, что "программные рецепты должны не только генерировать действительный результат, но и быть простыми в приготовлении и вкусными", а Морган-Мар отмечает, что пример программы Hello World с "101 яйцом" и "111 чашками масла" будет производить "много пищи для одного человека"[7][8]

FRACTRAN[править]

Программа FRACTRAN - это упорядоченный список положительных дробей вместе с начальным положительным целым входом n n. Программа запускается путем умножения целого n nчисла на первую дробь f fв списке, для которой n f }является целым числом. Затем целое n nчисло заменяется на n f }и правило повторяется. Если ни одна дробь в списке не дает целое число при умножении на n n, программа останавливается. FRACTRAN был изобретен математиком Джоном Конвеем.

GolfScript[править]

Программы в GolfScript состоят из списков элементов, каждый из которых помещается в стек по мере его появления, за исключением переменных, которые имеют блоки кода в качестве своего значения, и в этом случае код выполняется.[цитата необходима]

INTERCAL[править]

INTERCAL, сокращение от "Comp i ler La n guage Wi t h No P r onoun c e a b l e Acronym", был создан в 1972 году как пародия, чтобы высмеять аспекты различных языков программирования в то время.[4]

JSFuck[править]

JSFuck - это эзотерический стиль программирования JavaScript, где код пишется с использованием только шести символов: [, ], (, ), !, и +. В отличие от Brainfuck, который требует собственного компилятора или интерпретатора, JSFuck является допустимым кодом JavaScript, то есть программы JSFuck могут запускаться в любом веб-браузере или движке, который интерпретирует JavaScript.

LOLCODE[править]

LOLCODE разработан, чтобы напоминать речь lolcats. Ниже приведен пример "Hello World":

HAI
CAN ИМЕЕТ STDIO?
ВИДИМЫЙ "HAI WORLD!"
KTHXBYE

LOLCODE часто критикуют за то, что он не очень эзотерический, а скорее обычный процедурный язык с необычным словарным запасом[11].

Malbolge[править]

Malbolge (названный в честь 8-го круга Ада) был разработан, чтобы быть самым сложным и эзотерическим языком программирования. Помимо прочего, код является самоизменяющимся по дизайну, и эффект инструкции зависит от ее адреса в памяти.

Пит[править]

Программа Piet, которая печатает "Piet"
Программа "Hello World" в Piet

Piet - это язык, разработанный Дэвидом Морганом-Маром, чьи программы представляют собой растровые изображения, похожие на абстрактное искусство. Выполнение управляется "указателем", который перемещается по изображению от одной непрерывной цветной области к другой. Процедуры выполняются, когда указатель выходит из области.

Есть 20 цветов, для которых задано поведение: 18 "красочных" цветов, которые упорядочены 6-ступенчатым циклом оттенков и 3-ступенчатым циклом яркости; и черный и белый, которые не упорядочены. При выходе из "красочного" цвета и входе в другой выполняемая процедура определяется количеством шагов изменения оттенка и яркости. Черный не может быть введен; когда указатель пытается войти в черную область, вместо этого изменяются правила выбора следующего блока. Если все возможные правила испробованы, программа завершается. Области за пределами границ изображения также рассматриваются как черные. Белый не выполняет операций, но позволяет указателю "проходить". Поведение цветов, отличных от указанных 20, остается на усмотрение компилятора или интерпретатора.

Переменные хранятся в памяти в виде целых чисел со знаком в одном стеке. Большинство указанных процедур имеют дело с операциями в этом стеке, в то время как другие имеют дело с вводом / выводом и с правилами, по которым перемещается указатель компиляции.

Piet был назван в честь голландского художника Пита Мондриана. Первоначальное название Mondrian уже было принято системой визуализации статистических данных с открытым исходным кодом.

Шекспир[править]

Шекспир предназначен для того, чтобы программы выглядели как пьесы Шекспира. Например, следующий оператор объявляет точку в программе, которая может быть достигнута с помощью оператора типа GOTO:

 Акт I: оскорбления и лесть Гамлета.

Unlambda[править]

Unlambda - минималистский функциональный язык программирования, основанный на лыжном исчислении, но в сочетании с первоклассными продолжениями и императивным вводом-выводом (при вводе обычно требуется использование продолжений).[цитата необходима]

Пробелы[править]

Пробел использует только символы пробела (пробел, табуляцию и возврат), игнорируя все остальные символы, которые поэтому могут использоваться для комментариев. Это обратная сторона многих традиционных языков, которые не различают разные символы пробела, рассматривая табуляцию и пробел одинаково. Он также позволяет скрывать пробельные программы в исходном коде программ на таких языках, как C.

Культурный контекст[править]

Культурный контекст эзолангов был изучен Джеффом Коксом, который пишет, что эзоланги "переключают внимание с командования и контроля на культурное выражение и отказ", рассматривая эзоланги как похожие на кодовое искусство и кодовую поэзию, такие как мезангель Мезангель. Дэниел Темкин описывает Brainfuck как "отказывающийся ослабить границу между человеческим выражением и ассемблерным кодом и тем самым вовлекающий нас в нелепое логическое путешествие", обнажая врожденный конфликт между человеческим мышлением и компьютерной логикой. Он связывает программирование внутри esolang с выполнением оценки событий, таких как движение Fluxus, где воспроизведение правил логики в коде делает точку зрения языка ясной

См.также[править]

Читать[править]

Camille Paloque-Bergès (2009). "Langages ésotériques". Poétique des codes sur le réseau informatique. Archives contemporaines. 978-2-914610-70-4 ISBN.

Пруф[править]

//curlie.org/Computers/Programming/Languages/Obfuscated/