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


 

FALSE

Экзотический язык программирования, созданный в 1993 году Ваутером ван Ортмерссеном с двумя, по его словам, целями:

  • Можно было написать компилятор для него размером не более одного килобайта.
  • Придумать синтаксис, который бы выглядел шифровкой, случайным набором символов.

FALSE стал одним из первых экзотических языков программирования, в частности он послужил источником вдохновения для автора знаменитого языка Brainfuck. Не будет большим преувеличением сказать, что именно с FALSE началась мода на экзотические языки программирования.

Вместе с тем FALSE — всё еще достаточно практичный язык программирования. Хотя его и отличает write-only синтаксис, он поддерживает разумный набор операций, в отличие от являющегося реализацией варианта машины Тьюринга Brainfuck, не говоря уже о таких чудовищных языках как INTERCAL и Malbolge. Источником идей для FALSE был язык Forth, его синтаксис также напоминает синтаксис известного калькулятора dc для UNIX (с обратной польской нотацией). Одним из основных источников сложности при программировании на FALSE является использование экзотических знаков пунктуации (не разделяемых пробелами) вместо форт-слов.

FALSE был реализован как написанный на ассемблере для процессоров 68000 компилятор размером 1024 байта и переносимый интерпретатор, написанный на Си (на сайте доступна исполняемая версия для DOS). Имеется также реализация интерпретатора и компилятора для 386 DOS на ANSI Forth. Доступна также реализация FALSE на JavaScript.

Пример определения факториала на FALSE:

[2=$[\%1\]?~[2-f;!*]?]f:

 

Brainfuck

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

Одним из мотивов было создание языка с как можно меньшим компилятором. Отчасти он был вдохновлён языком FALSE, для которого существовал компилятор размера 1024 байта. Существуют компиляторы языка Brainfuck размера меньше 200 байт. Программы на языке Brainfuck писать сложно, за что его иногда называют языком для мазохистов. Но при этом важно отметить, что Brainfuck является вполне естественным, полным и простым языком и может использоваться при определении понятия вычислимости.

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

Brainfuck подходит для экспериментов по генетическому программированию из-за простоты синтаксиса, и, соответственно, генерации исходного кода.

Пример программы «Hello World!» на языке Brainfuck (оптимизированный):

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

Неоптимизированный пример той же программы:

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+++++++++++++++++++++++++++++.+++++++..+++.-------------------------------------------------------------------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++.+++.------.--------.-------------------------------------------------------------------.-----------------------.

 

Whitespace

Экзотический язык программирования, созданный Э. Брэди и К. Моррисом. Был выпущен в свет 1 апреля 2003 года. Существенным его отличием является то, что для управляющих конструкций используются только непечатаемые символы, а именно: пробел, перевод строки и табуляция. Интересным следствием этого факта является то, что текст программы на языке Whitespace можно «скрыть» внутри исходных кодов другой программы. Сам язык является реализацией стек-машины.

Программа состоит из последовательности пробелов (двоичный 0) и табуляций (1), команды разделяются символом перевода строки. Остальные символы игнорируются интерпретатором и могут быть использованы в качестве комментариев.

Пример программы «Hello World!» приведён по ссылке.


 

Befunge

Первая версия языка была создана Крисом Пресси в 1993. Как утверждал автор, его целью было разработать язык, максимально сложный для компиляции. Сложность обеспечивается командами p и g, модифицирующими текст программы.

Стековый экзотический язык программирования. Считается двумерным, так как программа на Befunge записывается в таблицу со сшитыми краями (тор), по которой в различных направлениях перемещается интерпретатор, исполняя команды, расположенные в её ячейках.

Пример программы с бесконечным циклом:

>v
^<

Пример программы «Hello World!»:

>                          v
@,,,,,,,,,,,,"Hello World!"<

Пример генератора случайных чисел:

vv  <      <
    2
    ^  v<
 v1<?>3v4
    ^   ^
>  >?>  ?>5^
    v   v
 v9<?>7v6
    v  v<
    8
 .  >  >   ^
^<

 

Piet

Экзотический язык программирования разработанный Давидом Морган-Маром. Использует разноцветные изображения в качестве программ. Программа выглядит как постживописная абстракция. Piet получил своё название от имени нидерландского художника Пита Мондриана.

Hello World на Piet

 

Программа «Hello World!» на языке Piet


LOLCODE

Экзотический язык программирования, созданный под влиянием интернет-мема о lolcat’ах.

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

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

Пример программы «Hello World!»:

HAI
    CAN HAS STDIO?
    VISIBLE "HAI WORLD!"
KTHXBYE

Программа, выводящая содержимое файла на экран с отловом исключений:

HAI
    CAN HAS STDIO?
    PLZ OPEN FILE "LOLCATS.TXT"?
    AWSUM THX
        VISIBLE FILE
    O NOES
        VISIBLE "ERROR!"
KTHXBYE

HQ9+

Экзотический язык программирования, созданный Клифом Биффлом, который состоит из четырёх команд, каждая из которых представляет один символ: H, Q, 9 и +. Этот язык не является полным по Тьюрингу.

Все команды языка:

  • Команда «H» выводит сообщение «Hello, world!»;
  • Команда «Q» выводит исходный код программы, которая выполняется (то есть, куайн);
  • Команда «9» выводит слова стихотворения 99 Bottles of Beer on the Wall;
  • Команда «+» увеличивает на единицу счетчик, который больше никак нельзя использовать.

Существует также другой шутливый язык программирования HQ9++, известный также как HQ9+ с Классами, объектно-ориентированная версия, созданная Девидом Морган-Маром. В ней добавлена новая команда, ++ , которая увеличивает счётчик два раза и создает объект. В соответствии с принципом сокрытия информации, доступ к этому объекту невозможен.

Кроме того, существует язык HQ9±, в котором по сравнению с HQ9++ добавлен оператор ‘-‘ для проверки правильности программы. Результаты проверки зависят от местонахождения оператора:

  • если он стоит первым символом в программе, то это синтаксическая ошибка
  • после ‘H’ — происходит ошибка ввода-вывода
  • после ‘Q’ — программа уходит в бесконечную рекурсию (хорошая реализация должна рухнуть после переполнения стека)
  • после ‘9’ — начинается бесконечный цикл
  • после ‘+’ — производится деление единицы на ноль
  • после ‘++’ — выбрасывает виртуальное исключение, являющееся методом нового подкласса стандартного суперкласса. В соответствии с лучшими принципами сокрытия данных, не существует способа перехватить это исключение.

Пример программы «Hello World!»:

H

 

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