Самые странные языки программирования: BrainF*ck и другие

Большинство разработчиков языков программирования стремятся к удобству и функциональности. Однако существуют и эзотерические языки, созданные как произведения абстрактного искусства, а не инструменты для написания рабочего кода. Рассмотрим некоторые из них.

BrainF*ck

BrainF*ck (1993 г.) использует минимальный компилятор всего с 8 символами. Программа представляет собой ленту ячеек со значениями от 0 до 255 (по умолчанию — 0). Указатель перемещается по ленте, изменяя значения в ячейках и считывая/записывая данные. Переменные и другие привычные элементы отсутствуют. Вывод «Hello, world!» требует значительного количества кода; даже оптимизированный вариант сложнее, чем в обычных языках.

Befunge

В отличие от одномерной ленты BrainF*ck, Befunge использует двумерную таблицу, топологически эквивалентную тору. Указатель перемещается в четырёх направлениях, достигая края и переходя на противоположную сторону. Ячейки содержат символы, добавляемые и извлекаемые командами «p/g». Код для «Hello, world!» сложен и визуально отличается от кода на других языках.

Malbolge

Malbolge, названный в честь восьмого круга ада Данте, задумывался как самый сложный компилятор после Befunge. Он использует троичную систему счисления, неструктурированный синтаксис и шифрование кода во время выполнения. Язык настолько сложен, что даже создатель не смог написать на нём ничего осмысленного. Первая программа появилась лишь через два года благодаря программе на Lisp, перебиравшей варианты кода.

Piet

Piet — визуальный язык, использующий пиксельный рисунок из 20 цветов. Компилятор считывает пиксели слева направо и сверху вниз. Команды определяются изменениями оттенка и яркости между соседними блоками. Указатель перемещается в четырёх направлениях; важны переходы между цветами, а не сами цвета.

Velato

Velato основан на музыке: инструкция — это высота тона ноты, а интервал — длительность (восьмые, четверти и т.д.). Вместо текста используются ноты, сгруппированные в блоки и интерпретируемые как команды.

Whitespace

Whitespace использует только пробелы, табуляцию и переводы строки. Код невидим; каждая команда — последовательность этих символов. Числа закодированы в двоичном коде, а символы — их ASCII-кодами (также двоичными).

Chicken

Chicken состоит из одного слова: «chicken». Количество слов «chicken» на строке определяет код операции.

Organya

Organya использует 12 инструкций, комбинации которых основаны на коде Морзе. Две начальные инструкции («тире» и пробел) выбирают одну из 18 операций.

Языки со стилизованным кодом

Существуют языки, стилизованные под другие формы представления, например, пьесу Шекспира или блок-схему (Pankton). В Pankton прямоугольники представляют элементы программы, а соединяющие линии — передачу данных. Пустая линия означает конец программы и вывод результата; пустой блок — ввод данных.

Emoji Code

Emoji Code использует эмоджи в качестве операторов. В EmojiCoder символы также представлены эмоджи.

JSFuck

JSFuck — минималистичный язык с ограниченным набором символов.

INTERCAL

INTERCAL — юмористический язык с необычным синтаксисом. Например, числа вводятся по одной цифре, а корректность работы зависит от «вежливости» программиста (использование слова «PLEASE»).

Q#

Q# — язык для квантовых вычислений, использующий квантовые эффекты (запутанность и когерентность). Требует глубоких знаний математики и физики.

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

Что будем искать? Например,программа