Из Википедии, бесплатной энциклопедии
  (Перенаправлено с Chef (язык программирования) )
Перейти к навигации Перейти к поиску

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

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

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

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

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

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

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

Befunge [ править ]

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

 "dlroW olleH" > : v  ^ , _ @

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

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

Brainfuck [ править ]

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

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

ФРАКТРАН [ править ]

Программа FRACTRAN представляет собой упорядоченный список положительных дробей вместе с исходным положительным целым числом . Программа запускается путем умножения целого числа на первую дробь в списке, для которой целое число. Затем целое число заменяется на, и правило повторяется. Если никакая дробь в списке не дает при умножении на целое число, программа останавливается. ФРАКТРАН был изобретен математиком Джоном Конвеем .

GolfScript [ править ]

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

ИНТЕРКАЛ [ править ]

INTERCAL , сокращение от «язык компилятора без произносимого акронима», был создан в 1972 году как пародия на высмеивание аспектов различных языков программирования того времени. [4]

JSFuck [ править ]

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

LOLCODE [ править ]

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

HAIМОЖЕТ ЕСТЬ STDIO?ВИДИМОЙ "МИР ХАЙ!"KTHXBYE

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

Мальболге [ править ]

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

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

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

Piet - это язык, разработанный Дэвидом Морган-Маром , программы которого представляют собой растровые изображения , похожие на абстрактное искусство . [9] Компиляция управляется «указателем», который перемещается по изображению от одной сплошной цветной области к другой. Процедуры выполняются, когда указатель покидает регион.

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

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

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

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

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

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

Unlambda [ править ]

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

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

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

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

Культурный контекст esolangs был изучен Geoff Cox, который пишет , что esolangs «сдвиг внимание от командования и управления в стороне культурного самовыражения и отказа», [11] видящие esolangs как похож на код искусство и код поэзию, таких как МЭЗ Breeze «с мезангеллы . Дэниел Темкин описывает Brainfuck как «отказ сгладить границу между человеческим выражением и ассемблерным кодом и тем самым отправив нас в нелепое путешествие логики» [12], обнажив внутренний конфликт между человеческим мышлением и компьютерной логикой. Он связывает программирование в esolang с выполнением оценки событий, таких как движение Fluxus , где разыгрывание правил логики в коде делает точку зрения языка ясной.[13]

Ссылки [ править ]

  1. Перейти ↑ McLean, A., Griffiths, D., Collins, N., and Wiggins, G. (2010). «Визуализация живого кода». В электронной визуализации и искусствах , Лондон: 2010.
  2. ^ Мэтью Фуллер, Исследования программного обеспечения , MIT Press, 2008
  3. ^ Эрик С. Раймонд (1996). Словарь нового хакера . MIT Press. п. 258. ISBN 978-0-262-68092-9.
  4. ^ a b Вудс, Дональд Р .; Лион, Джеймс М. (1973), Справочное руководство по языку программирования INTERCAL , Muppetlabs.com, заархивировано из оригинала 20 февраля 2009 г. , извлечено 24 апреля 2009 г.
  5. ^ "Интервью с Воутером ван Оортмерссеном" . esoteric.codes . 1 июля 2015 . Проверено 1 декабря 2015 года .
  6. Бейли, Джейн (29 февраля 2016 г.). «Торги по ценной бумаге» . Ежедневный WTF . Дата обращения 2 марта 2020 .
  7. ^ "Изучение JSF * ck" . alligator.io . Дата обращения 2 марта 2020 .
  8. ^ "LOLCODE # Критика" . Esolangs.org . Проверено 30 ноября 2015 года . LOLCODE часто критикуют за недостаточную эзотеричность. По замыслу, LOLCODE на самом деле является нормальным процедурным языком, за которым стоит lulzy синтаксис. Это резко контрастирует с «истинными» эсолангами, такими как Befunge, которые имеют двумерный синтаксис, почти похожий на игровую доску. По этой причине LOLCODE технически классифицируется как Weirdlang.
  9. Морган-Мар, Дэвид (25 января 2008 г.). «Язык программирования Piet» . Проверено 18 мая 2013 года .
  10. Перейти ↑ Cox 2013 , p. 6
  11. Перейти ↑ Cox 2013 , p. 5
  12. Temkin, Daniel (15 января 2014 г.). "Сбой && Взаимодействие человека / компьютера" . НООАРТ: Журнал беспредметного искусства (1).
  13. ^ Темкин, Даниил. "ебать мозги" . Журнал Media-N (весна 2013 г.) . Проверено 6 мая 2014 .

Дальнейшее чтение [ править ]

  • Камиль Палок-Бержес (2009). "Langages ésotériques". Poétique des codes sur le réseau informatique . Архивы современников. ISBN 978-2-914610-70-4 . 
  • Кокс, Джефф (2013). Говорящий код: кодирование как эстетическое и политическое выражение . MIT Press. ISBN 978-0-262-01836-4.

Внешние ссылки [ править ]

  • Запутанные языки программирования в Curlie
  • Esolang - вики, посвященная эзотерическим языкам программирования