Мы все более или менее можем понять C, C++, Java, Python, Kotlin или Swift, но есть некоторые языки программирования, которые сложны и непонятны для большинства разработчиков программного обеспечения.
Эти языки называются эзотерическими языками программирования (или esolang).
Esolang не предназначены для обычной разработки программного обеспечения. Они скорее некое доказательство концепции или шутка.
Вот список из пяти самых сложных языков программирования. Попробуйте создать «Hello World!» на каждом из и них и вы, несомненно, получите массу удовольствия.
Malbolge
Malbolge был создан в 1998 году Беном Олмстедом. Этот esolang считается самым сложным языком программирования.
Говорят, что автор Malbolge не написал ни одной программы, используя этот язык. Код hello world в Мальболге появился спустя почти два года после того, как Олмстед изобрел сам язык.
Вот код для печати «Hello World!» в Malbolge.
(= <`# 9] ~ 6ZY32Vx / 4Rs + 0No- & Jk)" Fh} | Bcy? `= * Z] Kw% oG4UUS0 / @ - ejc (: '8dc
Вот результат:
На Malbolge трудно писать, потому что:
- Сложные инструкции. Язык использует непонятные комбинации символов, которые, кажется, не подчиняются обычной логике.
- Самомодифицирующийся код. Код программы изменяется во время выполнения, что делает сложным предсказать, что будет делать программа.
- Неочевидные правила работы. Язык работает по сложным правилам, которые почти невозможно понять с первого раза.
INTERCAL
Джим Лайон и Дон Вудс разработали INTERCAL в 1972 году как пародию на различные языки программирования.
Первоначальное название ему было — «язык программирования с непроизносимой аббревиатурой».
INTERCAL имеет множество функций, которые могут расстроить программиста.
Например, он использует модификаторы, такие как “PLEASE” («ПОЖАЛУЙСТА»). Компилятор может отклонить код, если «ПОЖАЛУЙСТА» не используется. Он считает программу «недостаточно вежливой». Если модификатор «PLEASE» используется слишком много раз, компилятор отклоняет код, заявляя, что он «чрезмерно вежливый».
Вот код для печати «Hello, World!» на INTERCAL.
DO ,1 <- #13 PLEASE DO ,1 SUB #1 <- #238 DO ,1 SUB #2 <- #108 DO ,1 SUB #3 <- #112 DO ,1 SUB #4 <- #0 DO ,1 SUB #5 <- #64 DO ,1 SUB #6 <- #194 DO ,1 SUB #7 <- #48 PLEASE DO ,1 SUB #8 <- #22 DO ,1 SUB #9 <- #248 DO ,1 SUB #10 <- #168 DO ,1 SUB #11 <- #24 DO ,1 SUB #12 <- #16 DO ,1 SUB #13 <- #162 PLEASE READ OUT ,1 PLEASE GIVE UP
Вывод:
Brainfuck
Brainfuck был разработан Урбаном Мюллером в 1993 году. Этот язык был изобретен для развлечения программистов.
Само название предполагает, что язык должен быть чрезвычайно сложным для понимания любым программистом.
Весь язык состоит всего из восьми различных символов и их достаточно для реализации любого кода. Исходный компилятор, разработанный Мюллером, использовал всего 296 байт.
Вот код для печати «Hello World!» на Brainfuck.
++++++++++[>+++++++>++++++++++>+++<<<-]>++.>+.+++++++ ..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.
COW
COW был разработан в 2003 году Шоном Хибером. Как только вы увидите код “Привет, мир”, вы поймете, почему язык был назван «COW».
COW похож на Brainfuck по уровню сложности. По сравнению с Brainfuck в нем на четыре команды больше, то есть всего 12 команд на весь язык.
Вот код для печати «Hello, World!» на COW.
MoO MoO MoO MoO MoO MoO MoO MoO MOO moO MoO MoO MoO MoO MoO moO MoO MoO MoO MoO moO MoO MoO MoO MoO moO MoO MoO MoO MoO MoO MoO MoO MoO MoO moO MoO MoO MoO MoO mOo mOo mOo mOo mOo MOo moo moO moO moO moO Moo moO MOO mOo MoO moO MOo moo mOo MOo MOo MOo Moo MoO MoO MoO MoO MoO MoO MoO Moo Moo MoO MoO MoO Moo MMM mOo mOo mOo MoO MoO MoO MoO Moo moO Moo MOO moO moO MOo mOo mOo MOo moo moO moO MoO MoO MoO MoO MoO MoO MoO MoO Moo MMM MMM Moo MoO MoO MoO Moo MMM MOo MOo MOo Moo MOo MOo MOo MOo MOo MOo MOo MOo Moo mOo MoO Moo
Whitespace
Whitespace был разработан в Даремском университете Крисом Моррисом и Эдвином Брэди. Язык был выпущен в День дураков в 2003 году.
Весь язык зависит от пробелов, табуляции и перевода строк. Интерпретатор пробелов игнорирует непробельные символы и рассматривает их как комментарии к коду.
Вот пример кода для печати «Hello World!» — каждому символу пробела, табуляции или перевода строки предшествует комментарий «S», «T» или «L» соответственно.
Дичь
Есть еще много подобных эзотерических языков и вот еще некоторые из них.
Этот сайт предоставляет компиляторы и интерпретаторы почти для всех языков. Вы можете скопировать код из статьи и поиграть с ними.