Если вы думаете, что программировать на PHP в 2021 году или учить Ассемблер как первый язык — это странно, сейчас мы сдвинем вам парадигму. Мы собрали по-настоящему странные языки программирования, на которых кто-то пишет настоящие программы, но что ещё страннее — поддерживает их в рабочем состоянии.
Зачем? Ради искусства, конечно.
Brainfuck
Царь странных языков — Brainfuck. Это полноценный язык программирования, на котором можно реализовать любой алгоритм. Хотя даже самый умный алгоритм в таком виде будет выглядеть максимально странно:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
В этом языке всего 8 команд и нет специальных правил оформления кода. Даже комментариев нет, то есть прокомментировать смысл своего кода вы не сможете. Но зато компилятор Brainfuck весит всего 200 байт. Для сравнения: самый маленький компилятор C++ занимает в 500 раз больше места.
Вот те самые 8 команд:
> — перейти к следующей ячейке;
< — перейти к предыдущей ячейке;
+ — увеличить значение в текущей ячейке на 1;
- — уменьшить значение в текущей ячейке на 1;
. — вывести значение текущей ячейки;
, — ввести значение в текущую ячейку;
[ — если в текущей ячейке 0, идём на следующую ячейку;
] — если в текущей ячейке не 0, идём на предыдущую ячейку.
Befunge
Этому языку уже почти 30 лет, и он был придуман как самый сложный для компиляции язык программирования. Работает он так:
- Есть таблица с командами для процессора.
- Каждая команда обозначается каким-то символом из кодовой таблицы ASCII.
- Эти команды можно извлекать из таблицы с помощью модификаторов p и g.
- Кроме таблицы в языке есть много односимвольных команд, каждая из которых делает какую-то одну простейшую операцию.
- При компиляции программа собирается из содержимого таблицы и родных команд.
Даже самое простое описание этого языка уже выглядит очень сложно, не говоря уже о программах. Вот реализация алгоритма Фибоначчи, которая выдаёт первые 14 чисел последовательности:
62*1+v>01p001>+v>\:02p\:02gv
0 ^ <
. :p
» .1
v 0," "<0
" >1g12-+:|
, @
>^
Malbolge
Когда Бен Олмстед в 1998 году узнал, что Befunge считается самым сложным языком, то попросил подержать его пиво, и пока кто-то держал его пиво, создал Malbolge. Название языка совпадает с названием восьмого круга ада у Данте, что должно намекать на его адовую сложность.
Особенность этого языка в том, что он работает в троичной системе счисления и имеет всего три регистра для указателей и управления данными. Ещё у этого языка нет стандарта синтаксиса, команды могут идти в произвольном порядке. А чтобы было ещё интереснее, после загрузки вся свободная память интерпретатора заполняется с помощью команды crazy: она сравнивает в троичной системе 2 числа по своим правилам и результат отправляется в память.
И напоследок: после того, как выполняется очередная команда, она шифруется с помощью таблицы перевода.
Исходные символы:
!»#$%>&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Закодированные символы:
5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK’X~xDl}REokN:#?G«i@
Язык получился настолько сложным, что даже его создатель не смог написать на нём программу. Первая программа на Malbolge появилась два года спустя, когда энтузиасты с помощью Lisp перебирали варианты кода, чтобы вывести классическое «Hello, world»:
(‘&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#"`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj«Fhg${z@>
На сегодняшний день в мире есть всего 3 программы, написанные на этом языке, и ни одна из них не была создана человеком.
Piet
Напоследок — красивый язык программирования. Вот как выглядит программа «Hello, world»:
Язык работает так: компилятор оценивает разницу между соседними цветами, чтобы понять, что ему делать дальше. При этом он ещё перебирает оттенки цветов по кругу — так программа всегда знает, к какому цвету нужно перейти дальше.
Кроме оттенков программа сравнивает и яркость цветов: светло-синий и тёмно-синий — это два разных цвета, каждый из которых обрабатывается по-своему.
Если захотите на нём программировать — держите видео с инструкцией:
Ещё немного программ на Piet: