эзотерический язык программирования (иногда сокращается до esolang ) - это язык программирования, разработанный для проверки границ проектирования языков программирования, поскольку доказательство концепции, как программное обеспечение, как интерфейс взлома для другого языка (в частности, функциональное программирование или процедурное программирование языков), или в шутку. Использование эзотерического отличает эти языки от языков программирования, которые работающие разработчики используют для написания программного обеспечения. Обычно создатели esolang не предполагают, что язык будет использоваться для основного программирования, хотя некоторые эзотерические особенности, такие как визуально-пространственный синтаксис, вдохновили на практическое применение в искусстве. Такие языки часто популярны среди хакеров и любителей.
Удобство использования редко является целью разработчиков эзотерических языков программирования - часто дизайн приводит к прямо противоположному. Их обычная цель состоит в том, чтобы удалить или заменить традиционные языковые функции, сохраняя при этом язык, который является полным по Тьюрингу, или даже языком, для которого вычислительный класс неизвестен.
Самым ранним и до сих пор каноническим примером эзотерического языка был INTERCAL, разработанный в 1972 году Доном Вудсом и Джеймсом М. Lyon, с заявленным намерением отличаться от любого другого языка программирования, с которым были знакомы авторы. Он пародировал элементы известных языков программирования того времени, таких как Fortran, COBOL и язык ассемблера.
. В течение многих лет был представлен INTERCAL. только бумажными копиями руководства INTERCAL. Возрождение языка в 1990 году в виде реализации на C под Unix вызвало волну интереса к намеренному проектированию эзотерических компьютерных языков.
В 1993 году создал FALSE, небольшой стек-ориентированный язык программирования с синтаксисом, предназначенным для того, чтобы сделать код по своей сути запутанным, запутанным и нечитаемым. У него также есть компилятор всего на 1024 байта. Это вдохновило Урбана Мюллера на создание еще более компактного языка, печально известного ныне brainfuck, который состоит всего из восьми распознаваемых символов. Наряду с Befunge Криса Пресси (например, FALSE, но с двумерным указателем инструкций), brainfuck теперь является одним из наиболее поддерживаемых эзотерических языков программирования. Это канонические примеры минимального тьюринга и ненужных обфусцированных языковых функций. Brainfuck относится к семейству P ′ ′ из машин Тьюринга.
Befunge позволяет указателю инструкции перемещаться в нескольких измерениях через код. Например, следующая программа отображает «Hello World», помещая символы в стек в обратном порядке, а затем печатая символы в цикле, который перемещается по часовой стрелке через инструкции >
, :
, v
, _
, ,
и ^
.
«dlroW olleH»>: v ^, _ @
Двоичное лямбда-исчисление разработано с точки зрения теории алгоритмической информации, чтобы обеспечить максимально плотный код с минимальными средствами, имеющий 29-байтовый самоинтерпретатор, 21-байтовое сито простых чисел и 112-байтовый интерпретатор Brainfuck.
Brainfuck разработан с учетом крайнего минимализма и приводит к обфусцированному коду с программами, содержащими всего восемь различных символов. Следующая программа выводит «Hello World!»:
++++++++++ [>+++++++>++++++++++>+++ <<<-]>++.>+. +++++++.. +++.>++. <<+++++++++++++++.>. +++. ------.--------.>+.
A Программа FRACTRAN представляет собой упорядоченный список положительных дробей вместе с исходным положительным целым числом . Программа запускается путем умножения целого числа на первую дробь в списке, для которого - целое число. Целое число затем заменяется на , и правило повторяется. Если никакая дробь в списке не дает целого числа при умножении на , программа останавливается. FRACTRAN был изобретен математиком Джоном Конвеем.
Программы на GolfScript состоят из списков элементов, каждый из которых помещается в стек как он встречается за исключением переменных, значение которых имеет блоки кода, и в этом случае код выполняется.
INTERCAL, сокращение от «язык компилятора без произносимого акронима», был создан в 1972 году как пародия на высмеивание аспектов различных языков программирования того времени.
JSFuck - это эзотерический стиль программирования JavaScript, в котором код написан с использованием только шести символов: [
, ]
, (
, )
, !
и +
. В отличие от Brainfuck, для которого требуется собственный компилятор или интерпретатор, JSFuck является допустимым кодом JavaScript, что означает, что программы JSFuck можно запускать в любом веб-браузере или движке, который интерпретирует JavaScript.
LOLCODE предназначен для напоминают речь лолкотей. Ниже приведен пример "hello World":
HAI CAN HAS STDIO? ВИДИМЫЙ "МИР ХАИ!" KTHXBYE
LOLCODE часто критикуют за то, что он не очень эзотерический, а скорее обычный процедурный язык с необычной лексикой.
Malbolge (8-й круг ада) был разработан как самый сложный и эзотерический язык программирования. Помимо других функций, код является самомодифицирующимся по своей конструкции, и действие инструкции зависит от ее адреса в памяти.
Piet - это язык, разработанный Дэвидом Морганом-Маром, программы которого представляют собой растровые изображения, которые выглядят как абстрактное искусство. Компиляция управляется «указателем», который перемещается по изображению от одной сплошной цветной области к другой. Процедуры выполняются, когда указатель покидает регион.
Имеется 20 цветов, для которых задано поведение: 18 «красочных» цветов, которые упорядочены по 6-ступенчатому циклу оттенка и 3-ступенчатому циклу яркости; и черно-белые, которые не заказываются. При выходе из «красочного» цвета и входе в другой выполняемая процедура определяется количеством шагов изменения оттенка и яркости. Черные не могут быть введены; когда указатель пытается войти в черную область, вместо этого меняются правила выбора следующего блока. Если все возможные правила испробованы, программа завершается. Области за пределами изображения также обрабатываются как черные. Белый не выполняет операций, но позволяет указателю «пройти». Поведение цветов, отличных от указанных 20, остается на усмотрение компилятора или интерпретатора.
Переменные хранятся в памяти как целые числа со знаком в одном стеке . Большинство указанных процедур имеют дело с операциями в этом стеке, другие - с вводом / выводом и правилами, по которым перемещается указатель компиляции.
Пит был назван в честь голландского художника Пита Мондриана. Первоначально предполагаемое название, Мондриан, уже использовалось для системы визуализации статистических данных с открытым исходным кодом.
Шекспир разработан, чтобы программы выглядели как пьесы Шекспира. Например, следующий оператор объявляет точку в программе, которую можно достичь с помощью оператора типа GOTO:
Акт I: оскорбления и лесть Гамлета.
Unlambda - это минималистский функциональный язык программирования, основанный на исчислении SKI, но в сочетании с первоклассными продолжениями и императивным вводом-выводом ( с вводом, обычно требующим использования продолжений).
Пробел использует только символы пробела (пробел, табуляция и возврат), игнорируя все остальные символы, которые поэтому могут использоваться для комментариев. Это противоположно многим традиционным языкам, которые не различают разные символы пробелов и одинаково обрабатывают табуляцию и пробел. Это также позволяет скрывать программы Whitespace в исходном коде программ на таких языках, как C.
Культурный контекст эсолангов изучал Джефф Кокс, который пишет, что эсоланги " переключить внимание с командования и контроля на культурное самовыражение и отказ », рассматривая эсоланги как сходные с искусством кода и поэзией кода, например, Mez Breeze mezangelle. Дэниел Темкин описывает мозговой сбой как «отказ смягчить границу между человеческим выражением и ассемблерным кодом и, таким образом, увести нас в нелепое путешествие логики», обнажая внутренний конфликт между человеческим мышлением и компьютерной логикой. Он связывает программирование в esolang с выполнением оценки событий, таких как движение Fluxus, где воспроизведение правил логики в коде делает точку зрения языка ясной.
Викискладе есть материалы, связанные с эзотерическими языками программирования. |