stringtranslate.com

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

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

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

История

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

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

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

Общие черты

Хотя эзотерические языки программирования во многом различаются, есть некоторые общие черты, которые характеризуют многие языки, такие как пародия, минимализм и цель усложнить программирование. [6] Многие эзотерические языки программирования, такие как Brainfuck и подобные, используют в качестве команд отдельные символы, однако языки нередко читают построчно, как обычные языки программирования .

Уникальные представления данных

Обычные императивные языки программирования обычно позволяют хранить данные в переменных, но эзотерические языки могут использовать другие методы хранения данных и доступа к ним. Такие языки, как Brainfuck и Malbolge, позволяют читать данные только с помощью одного указателя , который необходимо переместить в интересующее место перед чтением данных. Другие, такие как Befunge и Shakespeare , используют один или несколько стеков для хранения данных, что приводит к способу выполнения, похожему на обратную польскую нотацию . Наконец, существуют языки, которые исследуют альтернативные формы представления чисел: вариант Brainfuck Boolfuck допускает операции только с отдельными битами, тогда как Malbolge и вариант INTERCAL TriINTERCAL полностью заменяют биты на троичную систему с основанием 3. [7]

Уникальные представления инструкций

Эзотерические языки также демонстрируют уникальные способы представления программных инструкций. Некоторые языки, такие как Befunge и Piet, представляют программы в двух или более измерениях, при этом управление программой перемещается по программе в нескольких возможных направлениях. [8] [ нужна страница ] Это отличается от обычных языков, в которых программа представляет собой набор инструкций, обычно встречающихся последовательно. Другие языки изменяют инструкции, чтобы они выглядели в необычной форме, часто такой, которая может быть прочитана людьми, с альтернативным значением основных инструкций. Шекспир достигает этого, делая все программы похожими на пьесы Шекспира. Chef достигает того же, превращая все программы в рецепты. [7] Chef особенно примечателен тем, что некоторые из них создали программы, которые успешно функционируют и как программа, и как рецепт, демонстрируя способность языка создавать это двойное значение. [9]

Трудно читать и писать

Многие эзотерические языки программирования созданы для создания глубоко запутанного кода , что затрудняет его чтение и написание. [10] Целью этого может быть создание интересной головоломки или задачи для авторов программ: например, Malbolge был явно спроектирован как сложная задача, поэтому он имеет такие функции, как самомодифицирующийся код и крайне нелогичные операции. [10] С другой стороны, некоторые эзотерические языки становится труднее писать из-за другого выбора дизайна. Brainfuck придерживается идеи минималистского набора команд, поэтому, хотя его инструкции в принципе просты, возникающий код труден для чтения человеком. Трудности с INTERCAL возникают в результате решения избегать операций, используемых в любом другом языке программирования, что связано с его происхождением как пародия на другие языки. [10]

Пародия и пародия

Одна из целей эзотерических языков программирования — пародировать или подделывать существующие языки и тенденции в области программирования. [10] Например, первый эзотерический язык INTERCAL возник как пародия на языки, использовавшиеся в 1960-х годах, такие как APL , Fortran и COBOL . Правила INTERCAL кажутся обратными правилам других языков. [11] Однако предметом пародии не всегда является другой устоявшийся язык программирования. Например, Шекспира можно рассматривать как подделку структуры шекспировских пьес. Язык Ок! — это пародия на Brainfuck , где восемь команд Brainfuck заменены различными звуками орангутанга, например «Ок. Ок?» [7]

Примеры

Бефунге

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

 "dlroW olleH" > : v ^ , _@ 

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

Бинарная комбинаторная логика

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

Трах мозгов

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

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

Все символы кроме игнорируются.+-<>,.[]

Курица

У курицы всего три токена: слово «курица», « » (символ пробела) и символ новой строки. Компилятор интерпретирует количество «цыплят» в строке как инструкцию кода операции, которую он использует для манипулирования данными в стеке. Простая программа для курицы может содержать десятки строк, в которых нет ничего, кроме слова «курица», повторяющегося бесчисленное количество раз. [15] Курицу изобрел Торбьорн Сёдерстедт, который черпал вдохновение для создания языка из пародии на научную диссертацию. [16] [17] [18]

Шеф-повар

Chef — это стек-ориентированный язык программирования , созданный Дэвидом Морганом-Маром и предназначенный для того, чтобы программы выглядели как кулинарные рецепты . [19] Программы состоят из заголовка, списка переменных и их значений данных, а также списка инструкций по работе со стеком. [20] Шуткий принцип проектирования гласит, что «рецепты программ должны не только генерировать достоверные результаты, но и быть простыми в приготовлении и вкусными», и Морган-Мар отмечает, что пример «Hello, World!» Программа с «101 яйцом» и «111 чашками масла» позволит производить «много еды на одного человека». [20] [21]

ФРАКТРАН

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

Гольфскрипт

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

ИНТЕРКАЛ

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

JSFuck

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

ЛОЛКОД

LOLCODE напоминает речь лолкотов . Ниже приведен пример «Hello World»:

ХАЙМОЖЕТ ЕСТЬ STDIO?ВИДИМЫЙ «МИР ХАЙ!»ПОКА

Хотя семантика LOLCODE не является чем-то необычным, его синтаксис описывается как лингвистическое явление, представляющее собой необычный пример неформальной речи и интернет-сленга в программировании. [27]

Мальбольге

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

Пит

Программа Piet, печатающая «Piet»
Программа «Hello World» в Piet

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

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

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

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

РЕОН-4213

Язык программирования REON-4213 является примером смешанного эзотерического языка, языка программирования и музыкального языка, смешанного вместе и используемого в серии видеоигр Ar tonelico . Этот уникальный формат позволяет видеоигре затронуть тему программирования в развлекательной форме, подходящей для более молодой аудитории.

Хотя этот язык нельзя использовать для выражения кода приложения, он использует концепции реальных языков программирования, таких как C++ и JavaScript, для представления идей и структур программного кода.

Rockstar

Rockstar — это язык программирования, предназначенный для создания программ, которые также представляют собой пауэр-баллады в стиле хэйр-метал . Его создал Дилан Битти. [32] [33] [34]

Шекспир

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

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

Рассказчик

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

Унлямбда

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

Пробелы

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

Культурный контекст

Культурный контекст эсолангов изучал Джефф Кокс, который пишет, что эсоланги «перемещают внимание от командования и контроля к культурному выражению и отказу», [37] рассматривая эсоланги как нечто похожее на кодовое искусство и кодовую поэзию, например, произведение Мез Бриза . mezangelle — убеждение, разделяемое другими в полевых условиях. [38] Дэниел Темкин описывает Brainfuck как «отказывающийся ослабить границу между человеческим выражением и ассемблерным кодом и тем самым отправляющий нас в нелепое логическое путешествие», [39] раскрывающий врожденный конфликт между человеческим мышлением и компьютерной логикой путем деконструкции их отношений. Он связывает программирование внутри эсоланга с выполнением оценки событий, например, событий движения Флюксус , где воспроизведение нерегулярных правил логики в коде проясняет точку зрения языка. [40]

Рекомендации

  1. ^ Маклин А., Гриффитс Д., Коллинз Н. и Виггинс Г. (2010). «Визуализация живого кода». В электронной визуализации и искусстве , Лондон: 2010.
  2. ^ Мэтью Фуллер, Исследования программного обеспечения, MIT Press, 2008 г.
  3. ^ Эрик С. Рэймонд (1996). Новый словарь хакера. МТИ Пресс. п. 258. ИСБН 978-0-262-68092-9.
  4. ^ Аб Вудс, Дональд Р.; Лайон, Джеймс М. (1973), Справочное руководство по языку программирования INTERCAL, Muppetlabs.com , получено 1 мая 2023 г.
  5. ^ "Интервью с Воутером ван Оортмерсеном". Эзотерические.коды . 1 июля 2015 года . Проверено 1 мая 2023 г.
  6. ^ Фуллер, Мэтью (2008). Программное обеспечение: лексикон . МТИ Пресс. ISBN 978-0-262-06274-9. ОСЛК  1156851190.
  7. ^ abc Морр, Себастьян. «Эзотерические языки программирования». (2015).
  8. ^ Кокс 2013.
  9. Майк (31 марта 2013 г.). «Выпечка торта «Привет, мир». Продукты разума Майка . Проверено 1 мая 2023 г.
  10. ^ abcd Матеас, М. и Монфор, Н. Бокс, Мрачно: запутывание, странные языки и эстетика кода. В «Цифровом искусстве и культуре: Цифровой опыт: дизайн, эстетика, практика» (DAC 2005) , Копенгаген, Дания, 2005.
  11. ^ Габури, Джейкоб (2018). «Критическое разрушение: к странным вычислениям». В Джентери Сэйерс (ред.). Routledge Companion по медиа-исследованиям и цифровым гуманитарным наукам . Нью-Йорк: Рутледж. стр. 483–491. дои : 10.4324/9781315730479-50. ISBN 978-1-315-73047-9.
  12. ^ «Языки».
  13. ^ Джон Тромп. «Самый функциональный». Международный конкурс запутанного кода C.
  14. ^ "Эль Брейнфак". копировать.sh . Проверено 30 ноября 2022 г.
  15. ^ «« Привет, мир » в эзотерических языках программирования? (Esolangs)» . Сообщество разработчиков 👩‍💻👨‍💻 . 25 июля 2020 г. Проверено 4 декабря 2022 г.
  16. ^ «Самые странные языки программирования | Программирование» . www.omnesgroup.com . 8 августа 2018 года . Проверено 4 декабря 2022 г.
  17. ^ «8 глупых языков программирования» . 27 апреля 2022 г.
  18. ^ Hongkiat.com (8 сентября 2021 г.). «10 самых странных языков программирования, том 2». Хонкиат . Проверено 4 декабря 2022 г.
  19. ^ Козенс, Саймон (2005). Продвинутое программирование на Perl . О'Рейли Медиа. п. 269. ИСБН 978-0-596-00456-9. Последней диковинкой Acme и одной из моих любимых является Acme::Chef, реализация языка программирования Chef Дэвида Моргана-Мара. В Chef программы выражены в виде рецептов:...
  20. ^ аб Морган-Мар, Дэвид (24 марта 2011 г.). «Шеф». Эзотерические языки программирования DM . Самостоятельно опубликовано . Проверено 1 мая 2023 г.
  21. Морган-Мар, Дэвид (28 июня 2014 г.). «Шеф – Привет, мир». Эзотерические языки программирования DM . Самостоятельно опубликовано . Проверено 1 мая 2023 г.
  22. ^ Кнейзель, Рональд (2022). Странный код: эзотерические языки, которые снова делают программирование увлекательным . Нет крахмального пресса. п. 217. ИСБН 978-1718502406.
  23. ^ Смит, Даррен (2007). «Учебник по гольф-скрипту».
  24. ^ Бэйли, Джейн (29 февраля 2016 г.). «Торги на безопасность». Ежедневный WTF . Проверено 2 марта 2020 г.
  25. ^ "Изучение JSF * ck" . аллигатор.io . Проверено 2 марта 2020 г.
  26. ^ Дэн Гудин (3 февраля 2016 г.). «eBay не планирует исправлять «серьезную» ошибку, позволяющую распространять вредоносное ПО [обновлено]». Арс Техника .
  27. ^ Забенков, А.А.; Морел Морель, окружной прокурор (2014). «Эзотерические языки программирования как современное семиотическое направление». Experientia Est Optima Magistra: Собрание произведений искусства . Белгородский государственный университет. 3 : 170.
  28. Темкин, Дэниел (3 ноября 2014 г.). «Интервью с Беном Олмстедом». эзотерические.коды . Проверено 7 января 2021 г.
  29. ^ abc Морган-Мар, Дэвид (25 января 2008 г.). «Пит» . Проверено 1 мая 2023 г.
  30. ^ Кнейзель, Рональд (2022). Странный код: эзотерические языки, которые снова делают программирование увлекательным . Нет крахмального пресса. стр. 246–247. ISBN 978-1718502406.
  31. ^ Кокс 2013, с. 6
  32. ^ "Рокзвезда: дом" . codewithrockstar.com .
  33. Lewrypublished, Fraser (1 августа 2018 г.). «Познакомьтесь с ученым, создавшим язык программирования, основанный на энергетических балладах». громче звук .
  34. Доктороу, Кори (25 июля 2018 г.). «Rockstar: язык программирования, код которого принимает форму мощных баллад». Боинг-Боинг .
  35. ^ «Рассказчик». www.github.com .
  36. Чу-Кэрролл, Марк К. (11 августа 2006 г.). «Пятничное патологическое программирование: унлямбда, или программирование без переменных». Хорошая математика, плохая математика (блог) . Научные блоги.
  37. ^ Кокс 2013, с. 5
  38. ^ «Истинное значение эзотерических языков программирования». Апифоника . Проверено 30 ноября 2023 г.
  39. Темкин, Дэниел (15 января 2014 г.). «Сбой и взаимодействие человека и компьютера». НООАРТ: Журнал беспредметного искусства (1).
  40. Темкин, Дэниел (8 мая 2013 г.). "мозготравка". Журнал «Медиа-Н» (весна 2013) . Проверено 1 мая 2023 г.

Библиография

Внешние ссылки