Обложка статьи

Самые необычные языки программирования

«Эзотерические» языки программирования разрабатывают и в качестве произведения искусства, и чтобы найти границы авторских возможностей или реализовать некую идею, а иногда и в шутку. Первые такие языки придумали еще в 1970-е, сегодня же их насчитывают десятки. «Мегабайт» подготовил подборку самых забавных языков программирования: невидимых, лаконичных, имитирующих фразы героев Шварценеггера или текст пьес Шекспира и совсем уж хулиганских.

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

Полнота по Тьюрингу — это когда вычислительный элемент способен реализовать любую вычислимую функцию.

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

Whitespace
Написанный на Whitespace код состоит только из непечатаемых знаков: пробела (Space, ASCII 32), табуляции (Tab, ASCII 9) и новой строки (LF, ASCII 10).

Whitespace создали в 2003 году Эдвин Брейди и Крис Моррис в качестве компенсации за несправедливое отношение к непечатаемым символам. Большинство современных языков программирования их игнорирует, поэтому Whitespace делает то же со всеми символами, кроме невидимых.

Команды Whitespace состоят примерно из 3–4 знаков. Также в языке существует только один тип данных — целые числа в двоичной системе. Сначала задается знак числа: Space — положительное, Tab — отрицательное, — затем следуют двоичная запись абсолютного значения числа (Space — 0, Tab — 1) и LF, сигнализирующий о конце записи.

Velato и Piet
Velato — язык, придуманный программистом с ником Rottytooth. Код программы определяют высоты нот и их порядок. Таким образом, его можно задать музыкальной дорожкой. Ниже приведен пример команды Hello, world! в нотном представлении и в аудиофайле.

Piet — разработанный Давидом Морган-Маром язык программирования, распознающий абстрактные разноцветные изображения в качестве команд. Для записи кода на Piet используют 20 цветов, включая черный и белый. Справа приведен пример команды Hello, world! в пиксельном представлении.

Программный юмор

COW — диалект языка программирования Brainfuck. Всего в языке 12 команд, выражающихся «мычанием» в разных регистрах: MoO, MOo, moO, mOo, moo, MOO, OOM, oom, mOO, Moo, OOO, MMM.

ArnoldC — «эзотерический» язык программирования, использующий цитаты героев Арнольда Шварценеггера в качестве команд. Среди используемых фраз есть весьма знаменитые: YOU ARE NOT YOU YOU ARE ME, I’LL BE BACK и GET YOUR ASS TO MARS.

Shakespeare
Shakespeare — язык программирования, в котором исходный код имитирует текст пьес Шекспира. Придумали это скандинавские программисты Карл Хассельстром и Джон Аслунд в 2001 году во время обучения. Узнав о существовании «эзотерических» языков, студенты загорелись идеей создать собственный в рамках задания по синтаксическому анализу.

Структура программы на Shakespeare: 

  • Заголовок — часть программы до первой точки, или комментарий.
  • Список действующих лиц — объявление переменных. Каждую переменную задают в формате «имя, описание»: в качестве первого используют имя одного из героев пьес Шекспира, а описание может быть произвольным комментарием. Все переменные хранят целые числа.
  • Тело программы состоит из актов и сцен, пронумерованных римскими цифрами. Каждая сцена — из отдельных команд, оформленных как реплики действующих лиц.

Константы в Shakespeare задают как существительные с набором прилагательных. Существительное соответствует 1 или -1 в зависимости от того, хорошее оно, нейтральное или плохое.

Примеры негативных прилагательных: cursed, foul, half-witted, lying, oozing, snotty, vile.
Примеры положительных прилагательных: cure, mighty, noble, prompt, reddest, smooth.
Примеры негативных существительных: bastard, beggar, codpiece, firt-gill, toad.
Примеры положительных существительных: King, Lord, plum, summer’s day, kingdom, pony.

Перед выполнением большинства команд на сцену нужно вывести как минимум два героя: говорящего и слушающего. Все команды выглядят как обращение одного персонажа к другому. Например, вывод или ввод символа: Speak your mind! и Open your mind! — а вывод или ввод числа: Open your heart! и Listen to your heart!

«Йоба»
«Йоба» — это язык (точнее, компилятор), созданный специально для российских гопников, мечтающих стать программистами. Пользователь torkve в конце марта 2011 года выложил на Habr описание «Интерпретатора из подворотен». В качестве команд в нем — фразы на русском с использованием нецензурной брани и просторечий: «усеки» как memorize, «тада» как then. Каждая новая команда начинается с «чо», а интерпретатор отвечает вам вполне человечными фразами — «йо!» и «гавно вопрос».

12 сентября 2020

Еще почитать по теме

Обложка статьи
Полуфинал чемпионата мира по программированию ACM ICPC
3 декабря команды начнут решать задачи реального этапа
Обложка статьи
Полуфинал чемпионата мира по программированию ACM ICPC
3 декабря команды начнут решать задачи реального этапа