Краткое введение в эзотерические языки программирования

Краткоевведениевэзотерическиеязыкипрограммирования

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

Эзоланги

Включено в список примерно в порядке появления в разговоре, за исключением Piet, который был перемещен, чтобы соответствовать другим многокодированным эсолангам.

ИНТЕРКАЛЬ

Дон Вудс, 2012.

«Доисторический esolang», язык компилятора без произносимого акронима (INTERCAL) также был первым языком шуток. Я не стал закрывать это, потому что приколы не так уж интересны.

ЛОЖНЫЙ

Воутер ван Оортмерссен , 2012

Возможно, первый «настоящий» эзотерический язык. Язык, разработанный для того, чтобы: 1) иметь минимально возможный компилятор и 2) быть действительно сложным для понимания. Известен тем, что вдохновлял как brainfuck, так и Befunge. Brainfuck пошел дальше в достижении этих целей, в то время как Befunge пошел в другом направлении.

Brainfuck

Урбан Мюллер, 2007.

Пожалуй, самый известный эзотерический язык, благодаря которому эсоланги стали мейнстримом. Сделано, когда Мюллер увидел ЛОЖЬ и подумал: «Я могу сделать лучше, чем это». В то время как компилятор FALSE занимал целый килобайт, компилятор Brainfuck был 995 байтов. В то время Мюллер также управлял Aminet , поэтому у него было достаточно досягаемости для первоначального распространения Brainfuck. Остальное сделали забавное название и необычная кодовая головоломка.

Среда выполнения brainfuck состоит из массива ячеек, все инициализированы до нуля. Всего восемь команд:

Команда < Предыдущая ячейка Ячейка уменьшения читать байт

Это зависит от реализации, что произойдет, если вы уменьшите значение ячейки на 0 или переместите указатель за последнюю ячейку. Каждый компилятор и среда выполнения будут принимать свои собственные решения. Каждый второй символ – это noop, что 1) позволяет относительно легко комментировать мозговой трюк, а 2) означает, что вы можете тайно встраивать программы для мозгов в другие языковые программы (мультикодирование).

Brainfuck относится к классу «брезентов Тьюринга», языков, которые настолько малы и просты, что близки к чистым машинам Тьюринга. Пока он завершен по Тьюрингу, на самом деле делает все, что связано с мозгами, будет проблемой. Поскольку brainfuck – это TC, вы можете использовать его для доказательства других языков TC: если вы можете написать интерпретатор brainfuck на языке P, то P будет полным по Тьюрингу. Например, вот доказательство того, что Пит является полным по Тьюрингу:

Толковый переводчик Пита. (источник)

В докладе я привел программу, которая умножает два числа. Вот аннотированная версия кода:

+++> ++ <установка: установите 2 и 3 как x и y [ while cell A is not 0- decrement cell A>[->+>+<<] добавьте ячейку B в C и D ( Теперь B = 0 & C = y)> [-<+>] переместить C в B (Теперь B = y & C = 0) << вернуться к A] end while <+>

Это добавляет ячейку B (

Символ
>

Следующая ячейка
+

Ячейка приращения
-

конец, пока
,

. запись байта
y в ячейку D Икс раз, то есть D теперь является значением

x y . В процессе мы «теряем» значение

Икс. Вся математика выполняется как мутация на месте, такова цена минимализма. Вы можете пройти сценарий самостоятельно 2007здесь.

Производные Brainfuck

Ook !, Cow и т. Д. Люди переделывают Brainfuck, потому что 1) это хорошее введение в написание собственного esolang, и 2) это позволяет вам быть лолрандомом. Язык для коров !!!

Много лет назад я писал моя собственная производная от мозгов . Я не горжусь этим.

Befunge

Крис Пресси , 2012.

В то время как FALSE и Brainfuck нацелены на минимальные компиляторы, Befunge нацелена на то, чтобы компилировать их как можно сложнее. Для этого Пресси использовал множество уловок. Самый известный из них – это двухмерный язык. Счетчик команд начинается в верхнем левом углу и перемещается вправо, возвращаясь влево, если он касается края области программы. Некоторые инструкции управляют стеком данных, в то время как другие изменяют направление движения счетчика.

1v 2> @ <+>

Это будет поместите 1 в стек, затем 2, затем завершите программу (` @ `) . Есть и другие операторы потока управления. Один из них `

_ `, который отображает значение и устанавливает направление как левое , если отображаемое значение не было

0 , и в этом случае он устанавливает правильное направление

В дополнение к одному стеку pushdown есть еще одно место, где вы можете хранить данные: сам исходный код Befunge. `

g `может читать программную инструкцию как значение и` п `может изменять исходный код для сохранения значения. Конечно, если счетчик инструкций достигнет сохраненного значения, он выполнит это значение как инструкцию. Написание `

v `в ячейку, которая изначально имела`

< `может радикально изменить всю семантику вашей программы в середине выполнения, что еще больше усложнит написание компилятор.

Существует несколько различных стандартов Befunge. Я написал разговор о Befunge - , который вы можете попробовать онлайн здесь. Befunge - 256 технически не Тьюринг завершено, потому что он ограничивает доску ячеек, но более поздние версии снимают это ограничение.

Карл Виберг и Джон Ослунд, 2015.

(Полное название - «Программирование Шекспира. Язык »или SPL, но все называют его Шекспиром.)

Язык, разработанный для похожи на пьесу Шекспира. Каждая переменная - это имя персонажа, и присвоение значений основано на количестве прилагательных. Это проще продемонстрировать на примере:

  [Enter Hamlet and Romeo] Гамлет: Грязный лживый трус!  Ромео: Ты храбрый, как разница между красивым деревом и мной!   <]     add cell B to C & D                (Now B = 0 & C = y)> 

Попробуйте онлайн!

Гамлет устанавливает значение Ромео на номер Икс. Поскольку «трусы» - это существительное «неприятное», мы начинаем с - 1 . Затем мы удваиваем его для каждого прилагательного, так что

Ромео: = 2 2 (-1) = -4 . Точно так же «герой» - это «хорошее» существительное, поэтому «храбрый герой» - 2. Это означает, что статус Ромео эквивалентен Гамлет: = 2 - Ромео . Другие программные конструкции, такие как поток управления, также встроены как диалог.

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

Пит

Дэвид Морган-Мар, 2018.

Piet - это язык визуального программирования в В прямом смысле слова: каждая программа Piet - это исполняемая картинка. Первые программы Piet выглядели как мешки со случайными пикселями:

Пиет «Привет, мир». (источник)

Но со временем некоторые увлеченные «художники Пита» разработали свои собственные стили. Это программа Томаса Шоха, одного из первых известных художников:

Пит Мондриан.
(источник)

Как и Шекспир, Пит - многокодовый язык. В отличие от Шекспира, программы на Пите работают 162 как искусство. Или, по крайней мере, гораздо проще сделать программу на Пите, которая будет хорошим искусством, по сравнению с программой Шекспира, которая будет хорошей пьесой.

TryItOnline принимает код Piet, но вы должны загрузить его как шестнадцатеричный дамп. Вместо этого вы должны использовать это.

BodyFuck

Ник Гензельманн, 2018.

Трахни мозг с веб-камерой! Вы двигаете своим телом, создавая символы, превращая процесс программирования в танец. Однако невозможно удалить символ, поэтому лучше не допускать ошибок.

Возможно, это не «полный» эсоланг, на самом деле просто новый способ написания мозгов. Но это мой разговор и то, что я говорю.

Повар

Дэвид Морган-Мар, 2018.

Язык программирования, исходный код которого выглядит как рецепт. Chef, пожалуй, самый распространенный язык с множеством кодов. Это потому, что это основной продукт Яна Богоста

Я не знаю, как объяснить, как работает Orca в текстовой форме. Вот краткая демонстрация, которую я сделал в рамках выступления:

(Обратите внимание, я сделал ошибку здесь, двоеточие - это MIDI-команда. Точка с запятой - это UDP.)

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

Хотя лучше всего использовать настольную версию, вы также можете попробовать ее в Интернете