Как вообще можно было такое придумать?
Если вы думаете, что программировать на PHP в 2021 году или учить Ассемблер как первый язык — это странно, сейчас мы сдвинем вам парадигму. Мы собрали по-настоящему странные языки программирования, на которых кто-то пишет настоящие программы, но что ещё страннее — поддерживает их в рабочем состоянии.
Зачем? Ради искусства, конечно.
Brainfuck
Царь странных языков — Brainfuck. Это полноценный язык программирования, на котором можно реализовать любой алгоритм. Хотя даже самый умный алгоритм в таком виде будет выглядеть максимально странно:
В этом языке всего 8 команд и нет специальных правил оформления кода. Даже комментариев нет, то есть прокомментировать смысл своего кода вы не сможете. Но зато компилятор Brainfuck весит всего 200 байт. Для сравнения: самый маленький компилятор C++ занимает в 500 раз больше места.
Вот те самые 8 команд:
> — перейти к следующей ячейке;
< — перейти к предыдущей ячейке;
+ — увеличить значение в текущей ячейке на 1;
— — уменьшить значение в текущей ячейке на 1;
. — вывести значение текущей ячейки;
, — ввести значение в текущую ячейку;
[— если в текущей ячейке 0, идём на следующую ячейку;
] — если в текущей ячейке не 0, идём на предыдущую ячейку.
Befunge
Этому языку уже почти 30 лет, и он был придуман как самый сложный для компиляции язык программирования. Работает он так:
- Есть таблица с командами для процессора.
- Эти команды можно извлекать из таблицы с помощью модификаторов p и g.
- Кроме таблицы в языке есть много односимвольных команд, каждая из которых делает какую-то одну простейшую операцию.
- При компиляции программа собирается из содержимого таблицы и родных команд.
Даже самое простое описание этого языка уже выглядит очень сложно, не говоря уже о программах. Вот реализация алгоритма Фибоначчи, которая выдаёт первые 14 чисел последовательности:
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»:
На сегодняшний день в мире есть всего 3 программы, написанные на этом языке, и ни одна из них не была создана человеком.
Piet
Напоследок — красивый язык программирования. Вот как выглядит программа «Hello, world»:
Язык работает так: компилятор оценивает разницу между соседними цветами, чтобы понять, что ему делать дальше. При этом он ещё перебирает оттенки цветов по кругу — так программа всегда знает, к какому цвету нужно перейти дальше.
Кроме оттенков программа сравнивает и яркость цветов: светло-синий и тёмно-синий — это два разных цвета, каждый из которых обрабатывается по-своему.
Если захотите на нём программировать — держите видео с инструкцией:
Ещё немного программ на Piet: