Путешествие в мир эзотерических языков

Путешествие в мир эзотерических языков

Введение

Люди часто занимаются необычными и странными экспериментами в разных областях, таких как наука, литература, музыка, искусство и многое другое. Программная инженерия не является исключением, принимая эксперименты и инновации. Представьте себе язык программирования, синтаксис которого состоит только из слова «chicken», а также пробелов и символов новой строки. Или, возможно, программирование с использованием строк, состоящих исключительно из символов «пробел», «новая строка» и «табуляция». Звучит как шутка или странная фантазия? Удивительно, но такие языки действительно существуют! В этой статье мы познакомимся с некоторыми эзотерическими языками.

Какие языки называются эзотерическими?

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

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

Хотя они редко используются в реальных приложениях, эти языки служат платформой для экспериментов, творчества и иногда юмора в сообществе программистов. В сегодняшней статье мы рассмотрим Malbolge, Whitespace, Brainfuck и Chicken.

INTERCAL

 
 
ChatGPT сказал:

INTERCAL (полное название — Compliler Language with no Pronounceable Acronym) на самом деле является первым эзотерическим языком программирования, когда-либо созданным.

Он был разработан в 1972 году Джимом Лайоном и Доном Вудсом как имитация других языков, существовавших в то время; современные эзотерические языки превосходят его по странности, но в некоторых аспектах, таких как вывод символов, он не имеет равных. Его справочник является произведением искусства сам по себе (в отличие от современных языков, которые фокусируются на значении команд, а не на буквальных описаниях), и содержит специальные названия для почти всех общих вещей.

Есть много вещей, которые стоит обсудить в его синтаксисе. Но самые необычные из них следующие:

  • Пользователь должен использовать такие слова, как «PLEASE», «DO», «PLEASE DO», «PLEASE GIVE UP» и т.д. в своём коде.

  • Пользователь должен использовать определённое количество слова «please». В противном случае компилятор выдаст ошибку с сообщением «Программист слишком вежлив» или «Программист недостаточно вежлив».

  • INTERCAL — одномерный язык, что делает его довольно ограниченным в способах его использования.

  • Символы ASCII, используемые в коде, имеют необычные названия. Например, знак равенства «=» называется «полумеш», а «<» называется «угол».

Don Woods and Jim Lyon

Malbolge

Malbolge — это язык программирования, специально созданный для того, чтобы быть чрезвычайно сложным для программистов. Изобретённый Беном Олмстедом в 1998 году, его вдохновение пришло от девятого круга Ада в «Божественной комедии» Данте, который называется «Мальболья». Олмстед намеренно разработал Malbolge с запутанным синтаксисом и набором инструкций, которые противоречат интуитивному восприятию, что гарантировало ему репутацию одного из самых криптографичных и загадочных языков в мире.

Ninth circle of Hell - Malbolge

Эта программа выводит «Hello, World!» при выполнении в интерпретаторе Malbolge. Стоит отметить, что понять, как работает этот код, невероятно сложно из-за умышленно запутанного характера языка Malbolge.

Синтаксис Malbolge настолько сложен и непонятен, что для нахождения скрипта (который может быть разным из-за множества способов его написания) для простой программы «Hello, world» потребовалось два года! И это стало возможным благодаря коду, написанному на Lisp, который фактически подобрал правильную комбинацию символов. Неудивительно, что Олмстед назвал своё творение именно так.

Whitespace

Эдвин Брейди и Крис Моррис создали Whitespace в 2002 году в Университете Дарема. Slashdot опубликовал обзор 1 апреля 2003 года. Идея использования символов пробела как операторов в языке C++ была шутливо предложена Бьярне Страуструпом за пять лет до этого.

Whitespace — это эзотерический язык с довольно интересным синтаксисом. Единственные символы, разрешённые его синтаксисом, — это символы пробела. Всего их три: символ пробела, символ новой строки (клавиша Enter) и табуляция. Такой синтаксис делает любую строку или фрагмент кода, написанный на этом языке, нечитаемым, так как он фактически невидим.

Интересным следствием является то, что код этого языка можно скрыть внутри кода, написанного на другом языке. Например, можно вставить строки кода на Whitespace в код C++, и будет крайне трудно его найти.

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

Brainfuck

Brainfuck — это эзотерический язык программирования, известный своим минималистичным дизайном и крайней простотой. Он был создан в 1993 году Урбаном Мюллером. Brainfuck работает на массиве ячеек памяти, изначально все ячейки установлены в ноль, и указатель, который указывает на текущую ячейку памяти. Язык состоит всего из восьми команд, каждая из которых представлена одним символом:

  • >: Увеличить указатель (переместиться к следующей ячейке памяти).

  • <: Уменьшить указатель (переместиться к предыдущей ячейке памяти).

  • +: Увеличить значение байта в текущей ячейке памяти.

  • -: Уменьшить значение байта в текущей ячейке памяти.

  • .: Вывести байт из текущей ячейки памяти как символ.

  • ,: Принять один байт ввода и сохранить его значение в текущей ячейке памяти.

  • [: Если байт в текущей ячейке равен нулю, перейти к следующей команде после соответствующей ].

  • ]: Если байт в текущей ячейке не равен нулю, вернуться к команде после соответствующей [.

Несмотря на свою простоту, Brainfuck является полнофункциональным языком, то есть теоретически может вычислять любую вычислимую функцию. Однако написание программ на Brainfuck может быть сложным из-за отсутствия привычных структур управления и ограниченного набора команд. Программы на Brainfuck часто выглядят как зашифрованные последовательности символов и обычно используются для образовательных целей, задач по сокращению кода (code golf) и как демонстрация принципов Turing-совместимости.

Синтаксис Malbolge настолько сложен и непонятен, что скрипт (который может быть разным из-за множества способов его написания) для простой программы «Hello, world» потребовал два года на разработку! Это стало возможным благодаря коду, написанному на Lisp, который фактически подобрал правильную комбинацию символов. Неудивительно, что Олмстед назвал своё творение именно так.

Befunge

Befunge — это эзотерический язык программирования, который, как и все предыдущие примеры, имеет специфический набор правил, которым пользователь должен следовать при написании кода на Befunge.

Поле программы представляет собой двумерный тор, физически это прямоугольная матрица команд-символов, закрытая вдоль верхней (нижней) границы и вдоль левой (правой) колонки. Указатель команд перемещается по полю (каждая команда — это символ с координатами x, y), выполняет команду и продолжает движение. Перемещение возможно во все 4 направления (по умолчанию вправо от точки 0,0), и когда указатель выходит за пределы «поля», он появляется на противоположной стороне.

Язык имеет две команды (p, g), которые изменяют само поле, т.е. программа «перезаписывает себя» во время выполнения. Исходный код программы может не совпадать с кодом в конце.

Крис Пресси, создатель Befunge, отметил, что он хотел создать язык, который был бы как можно более сложным для компиляции. И ему это удалось.

Пользователь имеет поле размером 25 строк по 80 символов в каждой. Также оригинальная версия 1993 года включала 36 команд, каждая из которых представлена символом ASCII. Вот некоторые примеры:

  • < — переместить курсор влево;

  • > — переместить курсор вправо;

  • ^ — переместить курсор на верхнюю строку;

  • v — переместить курсор на нижнюю строку;

  • @ — конец скрипта;

  • & — запросить у пользователя число и поместить его в стек; и т.д.

Вот пример кода для вычисления чисел Фибоначчи на Befunge:

Часто задаваемые вопросы (FAQ)

Эзотерический язык программирования, или просто «есоланг», — это язык программирования, созданный для экспериментов или развлекательных целей. В большинстве случаев есоланги не полезны для повседневного программирования и инженерии.

INTERCAL был создан в 1972 году как пародия. Он содержал основные аспекты языков программирования того времени, а также был невероятно сложным и ограниченным в использовании.

Пробел — это эсоланг, синтаксис которого состоит только из пробелов, табуляции и символов «enter», что делает код нечитаемым.

Infosoft — это команда IT- и QA-инженеров. Мы предоставляем компаниям технические таланты и опыт разработки продуктов для создания программного обеспечения мирового класса. Вы можете увеличивать или уменьшать свою удалённую команду разработчиков в любое время без финансовых рисков.

Наши другие статьи

.net

Sunday, April 14

C# - ambassador of versatility and usefulness in development

tild6539-6435-4236-a335-623733306236__596059

Thursday, March 14

Python - strengths and weaknesses

tild3339-3263-4535-b565-613634383538__0_3jgv1es40nhpcte3

Thursday, November 16

A Journey Through History of Artificial Intelligence

Свяжитесь с нами

Не стесняйтесь писать и звонить нам. Мы очень любим общаться с нашими клиентами.

Phone

+380(63)233-32-78
+1(484)473-18-08

Email

ip@infosoft.ua

Для заполнения данной формы включите JavaScript в браузере.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *