Самые странные языки программирования

Самые странные языки программирования

Как вообще можно было такое придумать?

Если вы думаете, что программировать на PHP в 2021 году или учить Ассемблер как первый язык — это странно, сейчас мы сдвинем вам парадигму. Мы собрали по-настоящему странные языки программирования, на которых кто-то пишет настоящие программы, но что ещё страннее — поддерживает их в рабочем состоянии.

Зачем? Ради искусства, конечно. 

Brainfuck

Царь странных языков — Brainfuck. Это полноценный язык программирования, на котором можно реализовать любой алгоритм. Хотя даже самый умный алгоритм в таком виде будет выглядеть максимально странно:

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

В этом языке всего 8 команд и нет специальных правил оформления кода. Даже комментариев нет, то есть прокомментировать смысл своего кода вы не сможете. Но зато компилятор Brainfuck весит всего 200 байт. Для сравнения: самый маленький компилятор C++ занимает в 500 раз больше места.

Вот те самые 8 команд:

> — перейти к следующей ячейке;

< — перейти к предыдущей ячейке;

+ — увеличить значение в текущей ячейке на 1;

- — уменьшить значение в текущей ячейке на 1;

. — вывести значение текущей ячейки;

, — ввести значение в текущую ячейку;

[ — если в текущей ячейке 0, идём на следующую ячейку;

] — если в текущей ячейке не 0, идём на предыдущую ячейку.

Befunge

Этому языку уже почти 30 лет, и он был придуман как самый сложный для компиляции язык программирования. Работает он так:

  1. Есть таблица с командами для процессора.
  2. Каждая команда обозначается каким-то символом из кодовой таблицы ASCII.
  3. Эти команды можно извлекать из таблицы с помощью модификаторов p и g.
  4. Кроме таблицы в языке есть много односимвольных команд, каждая из которых делает какую-то одну простейшую операцию.
  5. При компиляции программа собирается из содержимого таблицы и родных команд.

Даже самое простое описание этого языка уже выглядит очень сложно, не говоря уже о программах. Вот реализация алгоритма Фибоначчи, которая выдаёт первые 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:

Самые странные языки программирования
Выводит восклицательный знак
Самые странные языки программирования
Тоже «Hello, world», который выглядит как грибочек из Марио

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Елена Грицун

Вёрстка:

Кирилл Климентьев

Соцсети:

Олег Вешкурцев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Почему Ruby — особенный язык

Потому что он прост как JavaScript и многогранен как С++.

easy
Плюс в кружке — что он означает в математике
Плюс в кружке — что он означает в математике

У айтишников есть своё толкование

easy
Не Worlde, а «Вордль»: русифицируем заморскую игру
Не Wordle, а «Вордль»: русифицируем заморскую игру

Управляем анимацией и добавляем экранную клавиатуру

medium
Как начать писать программу и не пожалеть
Как начать писать программу и не пожалеть

Простое пошаговое руководство для тех, кто решил написать свой первый полезный софт

easy
Как работает сканер отпечатка пальца
Как работает сканер отпечатка пальца

Удобно, но не всегда безопасно.

medium
ColdFusion — редкий и важный язык программирования
ColdFusion — редкий и важный язык программирования

Один из первых серверных языков, который смог найти себе место в современном мире.

easy
Смартфон для программиста

Что выбрать, если хотите заняться мобильной разработкой.

easy
JavaScript для новичков: чем опасны нестрогие типы данных
JavaScript для новичков: чем опасны нестрогие типы данных

В JavaScript есть удобная штука, которая может сильно вам навредить.

medium
препроцессоры
За что ты послал нам препроцессоры? Чем мы тебя прогневали?

Что такое препроцессоры CSS и зачем они нужны.

medium
Почему процессоры Apple M1 такие быстрые
Почему процессоры Apple M1 такие быстрые

И правда ли они такие быстрые? И на что это влияет?

easy
easy