Мы не сомневаемся, что вы за свою жизнь успели узнать о множестве языков программирования: как минимум об Assembler, Pascal, С++, C# (как до-диез, только си-шарп), Java, Python, Ruby, Haskell. Все они имеют преданных фанатов и яростных противников. Разные языки могут затачиваться под определенные цели или быть более универсальными, однако в большинстве своем они используются умными бородатыми (и не очень) разработчиками для решения профессиональных задач.
Но когда программистам наскучивают серьезные языки программирования, они начинают разрабатывать новые, только не самые обычные, а эзотерические. Их создают для исследования возможностей разработки, в качестве произведения искусства, или, как чаще всего и случается, ради забавы. При этом многие из этих странных языков программирования потенциально ничуть не хуже классических, то есть теоретически их можно использовать и в настоящих проектах.
Эзотерические языки часто пародируют «серьезные», а тексты программ на них понятны лишь посвященным. В то время как разработчики реально используемых языков стараются сделать синтаксис максимально понятным, а сам процесс написания кода — удобным, создатели эзотерических языков обычно ставят перед собой противоположные задачи.
Несмотря на внешнюю примитивность, такие языки могут иметь бесконечный набор ячеек и тьюринговскую полноту, и, следовательно, по потенциальным возможностям не уступать «настоящим», подобным C, Pascal или Java. Например, для поклонников Терри Пратчетта существует «Ook!». Этот необычный язык программирования имитирует речь одного из героев «Плоского мира» — орангутанга-библиотекаря из Незримого Университета.
Пример кода для вывода сообщения «Hello, world!»:
Пример кода для вывода сообщения «Hello, world!» (с подсветкой спецсимволов):
Пример кода для вывода сообщения «Hello, world!»:
Hello World Souffle.
Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes
Method.
Put potatoes into the mixing bowl.
Put dijon mustard into the mixing bowl.
Put lard into the mixing bowl.
Put red salmon into the mixing bowl.
Put oil into the mixing bowl.
Put water into the mixing bowl.
Put zucchinis into the mixing bowl.
Put oil into the mixing bowl.
Put lard into the mixing bowl.
Put lard into the mixing bowl.
Put eggs into the mixing bowl.
Put haricot beans into the mixing bowl.
Liquefy contents of the mixing bowl.
Pour contents of the mixing bowl into the baking dish.
Serves 1.
Список персонажей в начале программы служит для объявления количества стеков, носящих имена, например, «Ромео» и «Джульетта». Эти герои общаются друг с другом — тем самым совершая операции ввода-вывода, могут задавать вопросы (аналог условного оператора). Части исходного кода на Shakespeare называются Актами (Act), которые разбиваются на Сцены (Scene). Каждые Акт и Сцена пронумерованы римскими цифрами и служат метками для GOTO.
Прежде чем персонажи смогут участвовать, они должны сначала выйти на сцену. Чтобы поместить персонажа на сцену, его необходимо вызвать командой Enter. Одновременно на сцене могут находиться только два персонажа. Иначе не ясно, с кем ведется общение. Чтобы персонаж покинул сцену, необходимо обратиться к нему командой Exit. Если акт заканчивается, или необходимо просто прогнать нескольких персонажей, то необходимо использовать команду Exeunt. В результате получается и пьеса, и программа.
Пример кода для вывода сообщения «Hello, world!»:
Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Prince Hamlet, the flatterer of Andersen Insulting A/S.
Act I: Hamlet's insults and flattery.
Scene I: The insulting of Romeo.
[Enter Hamlet and Romeo]
Hamlet:
You lying stupid fatherless big smelly half-witted coward! You are as
stupid as the difference between a handsome rich brave hero and thyself!
Speak your mind!
You are as brave as the sum of your fat little stuffed misused dusty
old rotten codpiece and a beautiful fair warm peaceful sunny summer's
day. You are as healthy as the difference between the sum of the
sweetest reddest rose and my father and yourself! Speak your mind!
You are as cowardly as the sum of yourself and the difference
between a big mighty proud kingdom and a horse. Speak your mind.
Speak your mind!
[Exit Romeo]
Scene II: The praising of Juliet.
[Enter Juliet]
Hamlet:
Thou art as sweet as the sum of the sum of Romeo and his horse and his
black cat! Speak thy mind!
[Exit Juliet]
Scene III: The praising of Ophelia.
[Enter Ophelia]
Hamlet:
Thou art as lovely as the product of a large rural town and my amazing
bottomless embroidered purse. Speak thy mind!
Thou art as loving as the product of the bluest clearest sweetest sky
and the sum of a squirrel and a white horse. Thou art as beautiful as
the difference between Juliet and thyself. Speak thy mind!
[Exeunt Ophelia and Hamlet]
Act II: Behind Hamlet's back.
Scene I: Romeo and Juliet's conversation.
[Enter Romeo and Juliet]
Romeo:
Speak your mind. You are as worried as the sum of yourself and the
difference between my small smooth hamster and my nose. Speak your
mind!
Juliet:
Speak YOUR mind! You are as bad as Hamlet! You are as small as the
difference between the square of the difference between my little pony
and your big hairy hound and the cube of your sorry little
codpiece. Speak your mind!
[Exit Romeo]
Scene II: Juliet and Ophelia's conversation.
[Enter Ophelia]
Juliet:
Thou art as good as the quotient between Romeo and the sum of a small
furry animal and a leech. Speak your mind!
Ophelia:
Thou art as disgusting as the quotient between Romeo and twice the
difference between a mistletoe and an oozing infected blister! Speak
your mind!
[Exeunt]
Пример кода для вывода сообщения «Hello, world!»:
Пример кода для вывода сообщения «Hello, world!»:
Эзотерические языки программирования – это интересно и забавно, но для их разработки и вообще для решения реальных кодинговых задач нужно хорошо разбираться в других, «настоящих», языках. Развивайтесь, а потом уже придет время и немного пошалить.
Но когда программистам наскучивают серьезные языки программирования, они начинают разрабатывать новые, только не самые обычные, а эзотерические. Их создают для исследования возможностей разработки, в качестве произведения искусства, или, как чаще всего и случается, ради забавы. При этом многие из этих странных языков программирования потенциально ничуть не хуже классических, то есть теоретически их можно использовать и в настоящих проектах.
Эзотерические языки часто пародируют «серьезные», а тексты программ на них понятны лишь посвященным. В то время как разработчики реально используемых языков стараются сделать синтаксис максимально понятным, а сам процесс написания кода — удобным, создатели эзотерических языков обычно ставят перед собой противоположные задачи.
Ook!
Целое семейство эзотерических языков выглядит так, будто основывается на принципе английского философа Уильяма Оккама: «Не следует множить сущее без необходимости». Они отрицают какой-либо дополнительный синтаксис, а их разработчики часто гонятся за уменьшением размера компилятора.Несмотря на внешнюю примитивность, такие языки могут иметь бесконечный набор ячеек и тьюринговскую полноту, и, следовательно, по потенциальным возможностям не уступать «настоящим», подобным C, Pascal или Java. Например, для поклонников Терри Пратчетта существует «Ook!». Этот необычный язык программирования имитирует речь одного из героев «Плоского мира» — орангутанга-библиотекаря из Незримого Университета.
Пример кода для вывода сообщения «Hello, world!»:
Whitespase
Whitespace (англ. пробел) — эзотерический язык программирования, созданный Э. Брэди и К. Моррисом. Существенным его отличием является то, что для управляющих конструкций используются только непечатаемые символы, а именно: пробел, перевод строки и табуляция. Интересным следствием этого факта является то, что текст программы на языке Whitespace можно «скрыть» внутри исходных кодов другой программы. Кстати язык был выпущен 1 апреля 2003 года, и многие восприняли его как шутку на День смеха.Пример кода для вывода сообщения «Hello, world!» (с подсветкой спецсимволов):
Языки с литературным синтаксисом
Если вам все-таки кажется очень неудобным читать цитаты высших приматов, разбираться в закорючках или читать невидимые знаки, есть варианты с довольно user-friendly синтаксисом.Chef
Chef — эзотерический язык программирования, разработанный Дэвидом Морган-Маром, программы на котором сходны с кулинарными рецептами. Каждая программа в языке состоит из названия, списка переменных и их значений, списка инструкций. Переменные могут быть названы только названиями основных продуктов питания. Стек, в которые помещаются значения переменных, называется англ. mixing bowl («чаша для смешивания»), а операции для манипуляции с переменными — mix («смешать»), stir («взболтать») и так далее. Язык идеально подходит для домохозяек и для Джеймса Бонда.Пример кода для вывода сообщения «Hello, world!»:
Hello World Souffle.
Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes
Method.
Put potatoes into the mixing bowl.
Put dijon mustard into the mixing bowl.
Put lard into the mixing bowl.
Put red salmon into the mixing bowl.
Put oil into the mixing bowl.
Put water into the mixing bowl.
Put zucchinis into the mixing bowl.
Put oil into the mixing bowl.
Put lard into the mixing bowl.
Put lard into the mixing bowl.
Put eggs into the mixing bowl.
Put haricot beans into the mixing bowl.
Liquefy contents of the mixing bowl.
Pour contents of the mixing bowl into the baking dish.
Serves 1.
Shakespeare
Если же вы не готовите, ходите есть в рестораны и предпочитаете духовную пищу, найдется вариант и для вас. Shakespeare — эзотерический язык программирования, разработанный Джоном Аслаудом и Карлом Хассельстромом. Язык Shakespeare призван замаскировать исходный код программы под пьесы Уильяма Шекспира.Список персонажей в начале программы служит для объявления количества стеков, носящих имена, например, «Ромео» и «Джульетта». Эти герои общаются друг с другом — тем самым совершая операции ввода-вывода, могут задавать вопросы (аналог условного оператора). Части исходного кода на Shakespeare называются Актами (Act), которые разбиваются на Сцены (Scene). Каждые Акт и Сцена пронумерованы римскими цифрами и служат метками для GOTO.
Прежде чем персонажи смогут участвовать, они должны сначала выйти на сцену. Чтобы поместить персонажа на сцену, его необходимо вызвать командой Enter. Одновременно на сцене могут находиться только два персонажа. Иначе не ясно, с кем ведется общение. Чтобы персонаж покинул сцену, необходимо обратиться к нему командой Exit. Если акт заканчивается, или необходимо просто прогнать нескольких персонажей, то необходимо использовать команду Exeunt. В результате получается и пьеса, и программа.
Пример кода для вывода сообщения «Hello, world!»:
Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Prince Hamlet, the flatterer of Andersen Insulting A/S.
Act I: Hamlet's insults and flattery.
Scene I: The insulting of Romeo.
[Enter Hamlet and Romeo]
Hamlet:
You lying stupid fatherless big smelly half-witted coward! You are as
stupid as the difference between a handsome rich brave hero and thyself!
Speak your mind!
You are as brave as the sum of your fat little stuffed misused dusty
old rotten codpiece and a beautiful fair warm peaceful sunny summer's
day. You are as healthy as the difference between the sum of the
sweetest reddest rose and my father and yourself! Speak your mind!
You are as cowardly as the sum of yourself and the difference
between a big mighty proud kingdom and a horse. Speak your mind.
Speak your mind!
[Exit Romeo]
Scene II: The praising of Juliet.
[Enter Juliet]
Hamlet:
Thou art as sweet as the sum of the sum of Romeo and his horse and his
black cat! Speak thy mind!
[Exit Juliet]
Scene III: The praising of Ophelia.
[Enter Ophelia]
Hamlet:
Thou art as lovely as the product of a large rural town and my amazing
bottomless embroidered purse. Speak thy mind!
Thou art as loving as the product of the bluest clearest sweetest sky
and the sum of a squirrel and a white horse. Thou art as beautiful as
the difference between Juliet and thyself. Speak thy mind!
[Exeunt Ophelia and Hamlet]
Act II: Behind Hamlet's back.
Scene I: Romeo and Juliet's conversation.
[Enter Romeo and Juliet]
Romeo:
Speak your mind. You are as worried as the sum of yourself and the
difference between my small smooth hamster and my nose. Speak your
mind!
Juliet:
Speak YOUR mind! You are as bad as Hamlet! You are as small as the
difference between the square of the difference between my little pony
and your big hairy hound and the cube of your sorry little
codpiece. Speak your mind!
[Exit Romeo]
Scene II: Juliet and Ophelia's conversation.
[Enter Ophelia]
Juliet:
Thou art as good as the quotient between Romeo and the sum of a small
furry animal and a leech. Speak your mind!
Ophelia:
Thou art as disgusting as the quotient between Romeo and twice the
difference between a mistletoe and an oozing infected blister! Speak
your mind!
[Exeunt]
ArnoldC
Любителей кино порадует язык программирования ArnoldC, составленный из цитат героев Арнольда Шварцнеггера. Не будем углубляться в подробности.Пример кода для вывода сообщения «Hello, world!»:
Malbolge (язык-«черный ящик»)
Malbolge — эзотерический язык программирования, придуманный Беном Олмстедом в 1998 году. Язык разработан с целью быть максимально сложным для написания программ, каким его и принято считать. Получил свое название от Malebolge, восьмого круга ада Данте. Язык настолько сложен, что просто так написать на нем программу может разве что Чак Норрис, дважды досчитав до бесконечности. Код первой программы, выводящей «HEllO WORld», сгенерировала другая программа на языке Lisp, использовавшая поиск в множестве всех возможных программ, через два года после появления самого языка Malbolge.Пример кода для вывода сообщения «Hello, world!»:
Эзотерические языки программирования – это интересно и забавно, но для их разработки и вообще для решения реальных кодинговых задач нужно хорошо разбираться в других, «настоящих», языках. Развивайтесь, а потом уже придет время и немного пошалить.