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

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

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

Если вы думаете, что программировать на 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», который выглядит как грибочек из Марио

Текст:

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

Редактор:

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

Художник:

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

Корректор:

Елена Грицун

Вёрстка:

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

Соцсети:

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

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

От токарных до лазерных

easy
Таблицы в HTML
Таблицы в HTML

Как они работают и что у них внутри

easy
Зачем нужны переменные в CSS
Зачем нужны переменные в CSS

Чтобы работать со стилями ещё гибче и проще.

medium
Лучшие языки программирования для старта в 2021 году
Лучшие языки программирования для старта в 2021 году

Выбери сейчас, чтобы не опоздать.

easy
Чем будем замещать
Чем будем замещать

Бесплатные аналоги необходимого софта

easy
Системный администратор — что нужно знать, чтобы получать 160 000 рублей
Системный администратор — что нужно знать, чтобы получать 160 000 рублей

Это не тот администратор, который ставит вам Windows.

easy
Богдан Овсиюк: из пограничника в тестировщики за полгода
Богдан Овсиюк: из пограничника в тестировщики за полгода

История выпускника Практикума.

easy
Невзламываемый шифр Вернама
Невзламываемый шифр Вернама

Его нельзя взломать даже теоретически.

medium
Чем занимаются бэкенд-разработчики
Чем занимаются бэкенд-разработчики

Никто не видит, но все пользуются.

easy
Как называть переменные и функции, чтобы вас уважали бывалые программисты
Как называть переменные и функции, чтобы вас уважали бывалые программисты

Если вы опытный разработчик, покажите эту статью начинающим.

medium
easy