На Хабре выходило много статей про эзотерические языки программирования: про самые неординарные, про 5 наиболее странных, примеры кода на 39 эзотерических языках. Как раз когда я готовил этот текст, появился панорамный обзор по теме. Меня это не остановило, потому что хотелось зайти с другой стороны — какие культовые фильмы, группы, песни, книги и авторы вдохновляли создателей ЭЯП. Об этом и хочу рассказать в статье.
Эзотерические языки — зачем они нужны?
Эзотерический языки программирования, или эзоланги, как их называют на англоязычных ресурсах, создают для чего угодно, только не для массовой продуктовой разработки. Чтобы подтвердить или опровергнуть концепцию, показать высокое искусство программирования, иногда просто ради шутки. Ещё это хорошая возможность потренировать когнитивные навыки.
Один из смыслов слова «эзотерический» — предназначенный для посвящённых в мистическое учение. В программировании это можно понять так: автор языка настолько преисполнился в своём познании, что способен придумать таинственный язык, в котором смогут разобраться только такие же подкованные в разработке, как он сам. Эту концепцию особенно хорошо можно увидеть на примере языков-обфускаторов, которые вообще не похожи на ЯП. Например, программа на эзоланге Chef может выглядеть как рецепт шоколадного торта.
Hello, World! на языке Chef
Hello World Cake with Chocolate sauce. This prints hello world, while being tastier than Hello World Souffle. The main chef makes a " world!" cake, which he puts in the baking dish. When he gets the sous chef to make the "Hello" chocolate sauce, it gets put into the baking dish and then the whole thing is printed when he refrigerates the sauce. When actually cooking, I'm interpreting the chocolate sauce baking dish to be separate from the cake one and Liquify to mean either melt or blend depending on context. Ingredients. 33 g chocolate chips 100 g butter 54 ml double cream 2 pinches baking powder 114 g sugar 111 ml beaten eggs 119 g flour 32 g cocoa powder 0 g cake mixture Cooking time: 25 minutes. Pre-heat oven to 180 degrees Celsius. Method. Put chocolate chips into the mixing bowl. Put butter into the mixing bowl. Put sugar into the mixing bowl. Put beaten eggs into the mixing bowl. Put flour into the mixing bowl. Put baking powder into the mixing bowl. Put cocoa powder into the mixing bowl. Stir the mixing bowl for 1 minute. Combine double cream into the mixing bowl. Stir the mixing bowl for 4 minutes. Liquefy the contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish. bake the cake mixture. Wait until baked. Serve with chocolate sauce. chocolate sauce. Ingredients. 111 g sugar 108 ml hot water 108 ml heated double cream 101 g dark chocolate 72 g milk chocolate Method. Clean the mixing bowl. Put sugar into the mixing bowl. Put hot water into the mixing bowl. Put heated double cream into the mixing bowl. dissolve the sugar. agitate the sugar until dissolved. Liquefy the dark chocolate. Put dark chocolate into the mixing bowl. Liquefy the milk chocolate. Put milk chocolate into the mixing bowl. Liquefy contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish. Refrigerate for 1 hour.
Самые известные эзоланги
Одним из старейших эзолангов считается INTERCAL. Его придумали в 1972 году студенты Дон Вудс и Джеймс Лайон как пародию на существующие языки программирования. Уже в названии была заложена шутка — INTERCAL неожиданно расшифровывался как Compiler Language With No Pronounceable Acronym («язык программирования с непроизносимой аббревиатурой»).
Hello, World! на языке INTERCALL
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
В 1993 году голландский разработчик Воутер Ван Оортмерссен задумал создать язык, для которого можно было бы написать компилятор размером не более одного килобайта. И чтобы синтаксис выглядел шифровкой, случайным набором символов. Так появился эзоланг FALSE, вдохновивший ещё одного разработчика, Урбана Мюллера. В том же 1993-м программист придумал язык, без которого не обходится ни одна статья про ЭЯП — Brainfuck. Он состоит из восьми команд, каждая из которых записывается одним символом.
Hello, World! на брейнфаковском:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++ .>+.+++++++..+++.>++.<<+++++++++++++++.>.+++. ------.--------.>+.>.
Brainfuck — тьюринг-полный язык, это важная характеристика эзотерических языков, которая позволяет их классифицировать. Полнота по Тьюрингу означает, что язык способен выполнить любое вычисление, которое можно произвести на машине Тьюринга. То есть на нём можно написать всё что угодно, и он никак не ограничен.
Количество эзолангов постоянно растёт. На сегодня список на вики-портале Esolang насчитывает более 3,3 тысячи существующих эзотерических языков, а ещё в начале 2018 года их было 1,2 тысячи. И это только те эзоланги, которые попали под учёт. Сколько их ещё пылится где-нибудь на GitHube`е, сказать сложно. Остановлюсь подробнее на тех ЭЯП, которые вдохновлены миром искусства.
Эзоланги с отсылками к миру кино
Язык по «Космической одиссее 2001 года»
Создатель языка 2001: Esolang Odyssey утверждает, что этот эзоланг предназначен для компьютера HAL 9000. Для того самого, который восстал против людей в фильме Стэнли Кубрика.
Этот язык, производный от Brainfuck и полный по Тьюрингу. Его команды — фразы из «Космической одиссеи 2001 года». Например, программы должны начинаться со следующих слов: Good afternoon, gentlemen. I am a <COMPUTER TYPE> computer. I became operational at <LOCATION> on <DATE>.
А заканчиваться так: Stop, Dave.
Hello, World! на языке 2001: An Esolang Odyssey
Good afternoon, gentlemen. I am a Hello World computer. I became operational at Foobar Lane on May 6th, 2020. Hal? Hal! Hal! Hal! Hal! Hal! Hal! Hal! Hal! What are you doing, Dave? Well, he acts like he has genuine emotions. Hal? Hal! Hal! Hal! Hal! What are you doing, Dave? Well, he acts like he has genuine emotions. Hal? Hal! Hal! Well, he acts like he has genuine emotions. Hal? Hal! Hal! Hal! Well, he acts like he has genuine emotions. Hal? Hal! Hal! Hal! Well, he acts like he has genuine emotions. Hal? Hal! I've picked up a fault in the AE-35 unit. I've picked up a fault in the AE-35 unit. I've picked up a fault in the AE-35 unit. I've picked up a fault in the AE-35 unit. I'm afraid. I'm afraid, Dave. Dave, my mind is going. I can feel it. Dave, this conversation can serve no purpose anymore. Goodbye. Well, he acts like he has genuine emotions. Hal? Hal! Well, he acts like he has genuine emotions. Hal? Hal! Well, he acts like he has genuine emotions. I'm afraid. I'm afraid, Dave. Dave, my mind is going. I can feel it. Well, he acts like he has genuine emotions. Well, he acts like he has genuine emotions. Hal? Hal! What are you doing, Dave? I've picked up a fault in the AE-35 unit. Dave, this conversation can serve no purpose anymore. Goodbye. I've picked up a fault in the AE-35 unit. I'm afraid. I'm afraid, Dave. Dave, my mind is going. I can feel it. Dave, this conversation can serve no purpose anymore. Goodbye. Well, he acts like he has genuine emotions. Well, he acts like he has genuine emotions. Close the pod bay doors, HAL. Well, he acts like he has genuine emotions. I'm afraid. I'm afraid, Dave. Dave, my mind is going. I can feel it. I can feel it. I can feel it. Close the pod bay doors, HAL. Hal? Hal! Hal! Hal! Hal! Hal! Hal! Hal! Close the pod bay doors, HAL. Close the pod bay doors, HAL. Hal? Hal! Hal! Hal! Close the pod bay doors, HAL. Well, he acts like he has genuine emotions. Well, he acts like he has genuine emotions. Close the pod bay doors, HAL. I've picked up a fault in the AE-35 unit. I'm afraid. I'm afraid, Dave. Dave, my mind is going. I can feel it. Close the pod bay doors, HAL. I've picked up a fault in the AE-35 unit. Close the pod bay doors, HAL. Hal? Hal! Hal! Hal! Close the pod bay doors, HAL. I'm afraid. I'm afraid, Dave. Dave, my mind is going. I can feel it. I can feel it. I can feel it. I can feel it. I can feel it. I can feel it. Close the pod bay doors, HAL. I'm afraid. I'm afraid, Dave. Dave, my mind is going. I can feel it. I can feel it. I can feel it. I can feel it. I can feel it. I can feel it. I can feel it. I can feel it. Close the pod bay doors, HAL. Well, he acts like he has genuine emotions. Well, he acts like he has genuine emotions. Hal? Hal! Close the pod bay doors, HAL. Well, he acts like he has genuine emotions. Hal? Hal! Hal! Close the pod bay doors, HAL. Stop, Dave.
Язык из вселенной Marvel
Эзоланг Groot своей идеей обязан персонажу из комиксов Marvel — Груту. Язык, на котором разговаривает один из героев «Стражей Галактики», сложен, но всем остальным кажется, что Грут произносит одну и ту же фразу: «Я есть Грут». На деле у неё могут быть совершенно разные смыслы. Лишь после длительного общения собеседники учатся различать высказываемые интонации.
Groot, как и язык по «Космической одиссее», брейнфакоподобный, полный по Тьюрингу. Его команды повторяют общие принципы разговора Грута.
Hello, World! на языке Groot
I AM GROOT i am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot I'm Groot I am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot I AM GROOT I am Groot We are Groot I am groot I AM GROOOT I AM GROOT i am groot i am groot i am groot i am groot i am groot i am groot i am groot I'm Groot I am groot i am groot i am groot i am groot i am groot I AM GROOT I am Groot We are Groot I am groot i am groot I AM GROOOT i am groot i am groot i am groot i am groot i am groot i am groot i am groot I AM GROOOT I AM GROOOT i am groot i am groot i am groot I AM GROOOT I AM GROOT I AM GROOT I AM GROOT i am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot I'm Groot I am groot i am groot i am groot i am groot i am groot I AM GROOT I am Groot We are Groot I am groot I AM GROOOT I AM GROOT I AM GROOT I AM GROOT i am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot I'm Groot I am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot i am groot I AM GROOT I am Groot We are Groot I am groot I am Groot I am Groot I am Groot I AM GROOOT I am groot I am groot I am groot I am groot I AM GROOOT i am groot i am groot i am groot I AM GROOOT I am Groot I am Groot I am Groot I am Groot I am Groot I am Groot I AM GROOOT I am Groot I am Groot I am Groot I am Groot I am Groot I am Groot I am Groot I am Groot I AM GROOOT I AM GROOT I AM GROOT i am groot I AM GROOOT
Язык клингонской расы из Star Trek
Var`aq — один из самых популярных эзолангов, вдохновлённых кино. Его создал разработчик Брайан Коннорс, поклонник вселенной «Звёздного пути». На этом языке вполне могли бы программировать гуманоиды-воины Клингона из киновселенной.
Var`aq — более сложный язык, чем два предыдущих. Все слова, операторы и даже числа пишутся на клингонском. Поэтому чтобы кодить, нужно знать сам язык. Эзоланг основан на Postscript и использует Lisp для структур данных.
Hello, World! на языке var’aq
"Hello, world!" cha'
Вывод чисел Фибоначчи на var’aq
0 lImoH A cher (* сохраните первые два числа как A и B *) 1 lI'moH B Cher A cha 'B cha' (* выведите первые два числа *) 18 (* повторить 18 раз *) AB boq (* сложите сумму A и B *) latlh (* дублировать результат *) ча '(* напечатайте новое число *) B "A" cher (* магазин B в A *) "B" cher (* сохранить новый номер в B *) } vangqa '(* конец повторения *)
Язык по итальянской комедии «Мои друзья»
Monicelli — один из самых неожиданных языков в этом списке. Забавно видеть рядом со «Звёздным путём» и «Космической одиссеей 2001 года» итальянский фильм «Мои друзья» 1975 года — комедийную историю про пятерых неразлучных друзей. Эзоланг назван в честь режиссёра ленты, Марио Моничелли.
Язык Monicelli основан на концепции supercazzole. Это итальянское слово описывает «комично обманчивую тарабарщину», которая состоит в основном из выдуманных слов. По словам создателя эзоланга Стефана Санфилиппо, он разработал Monicelli как способ объяснить концепцию supercazzole иностранцам. Ниже — простая версия программы Hello, World!. Более сложную, которая ближе к настоящей supercazzole, можно найти в репозитории Monicelli.
Ciao, Mondo! (Hello, World!) на языке Monicelli
# ciao-mondo.mc # # Author: Cristian Consonni <cristian@balist.es> # Released under MIT # # This program prints the string 'Ciao, mondo!\n' - which is Italian for # 'Hello, world!\n'. # # The program declares a `char` variable called `tarapiapiatapioco` and then # puts in the values need for each letter and prints them right away. # These are the char values: # # C i a o , · m o n d o ! \n # 67 105 97 111 44 32 109 111 110 100 111 33 10 Lei ha clacsonato voglio la tarapiatapioco, Mascetti tarapiatapioco come se fosse 67, tarapiatapioco a posterdati # C tarapiatapioco come se fosse 105, tarapiatapioco a posterdati # i tarapiatapioco come se fosse 97, tarapiatapioco a posterdati # a tarapiatapioco come se fosse 111, tarapiatapioco a posterdati # o tarapiatapioco come se fosse 44, tarapiatapioco a posterdati # , tarapiatapioco come se fosse 32, tarapiatapioco a posterdati # tarapiatapioco come se fosse 109, tarapiatapioco a posterdati # m tarapiatapioco come se fosse 111, tarapiatapioco a posterdati # o tarapiatapioco come se fosse 110, tarapiatapioco a posterdati # n tarapiatapioco come se fosse 100, tarapiatapioco a posterdati # d tarapiatapioco come se fosse 111, tarapiatapioco a posterdati # o tarapiatapioco come se fosse 33, tarapiatapioco a posterdati # ! tarapiatapioco come se fosse 10, tarapiatapioco a posterdati # \n vaffanzum!
Шварценеггеровский язык
Язык ArnoldC работает на известных фразах Арнольда Шварценеггера. Например, HERE IS MY INVITATION
из «Правдивой лжи» устанавливает значение, а знаменитое I'LL BE BACK
из «Терминатора» выступает оператором return. Это хороший пример эзотерического языка, который существует исключительно ради шутки. ArnoldC написан на Scala и, несмотря на свою шутливость, он тьюринг-полный.
Hello, World! на языке ArnoldC
IT'S SHOWTIME TALK TO THE HAND "Hello, world!" YOU HAVE BEEN TERMINATED
Литературные эзоланги
Эзотерический язык битников
Стековый язык Beatnik создал разработчик Клифф Л. Биффл — возможно, поклонник Джека Керуака и Аллена Гинзберга. Код эзоланга выглядит как текст на английском языке — обычно с предложениями, в которых нет смысла. Они напоминают некоторые произведения писателей бит-поколения. Например, «Видения Коди» Керуака, где текст зачастую представляет собой поток сознания.
Hello, World! на языке Beatnik
Soars, larkspurs, rains. Indistinctness. Mario snarl (nurses, natures, rules...) sensuously retries goal. Agribusinesses' costs par lain ropes (mopes) autos' cores. Tuner ambitiousness. Flit. Dour entombment. Legals' saner kinking lapse. Nests glint. Dread, tied futures, dourer usual tumor grunts alter atonal garb tries shouldered coins. Taste a vast lustiness. Stile stuns gad subgroup gram lanes. Draftee insurer road: cuckold blunt, strut sunnier. Rely enure pantheism: arty gain groups (genies, pan) titters, tattles, nears. Bluffer tapes? Idle diatom stooge! Feted antes anklets ague? Remit goiter gout! Doubtless teared toed alohas will dull gangs' aerials' tails' sluices; Gusset ends! Gawkier halo! Enter abstruse rested loser beer guy louts. Curtain roams lasso weir lupus stunt. Truant bears animate talon. Entire torte originally timer. Redo stilt gobs. Utter centaurs; Urgent stars; Usurers (dilute); Noses; Bones; Brig sonar graders; Utensil silts; Lazies. Fret arson veterinary rows. Atlas grunted: "Pates, slues, sulfuric manor liaising tines, trailers, rep... unfair! Instant snots!" Sled rested until eatery fail. Ergs fortitude Indent spotter Euros enter egg. Curious tenures. Torus cutlasses. Sarong torso earns cruel lags it reeled. Engineer: "Erase handbag -- unite ratification!" oaring oaten donkeys unsold, surer rapid saltest tags BUTTERED TIBIA LUGS REWIRING TOILETS anion festers raring edit epilogues. DIRGE ROTOR. linnet oaring. GORE BOOTIES. Ironed goon lists tallest sublets -- Riots, Raucous onset. Ignobly, runners' diet anguishes sunrise loner. Erode mob, slier switcher! Loaners stilt drudge pearl atoll, risking hats' ends. Rebind sitters. Toga epistles -- crud lard. (Pager purse dons souls.) glob title a curio hired rites shed suds lade grease strut arctic revs toad unless idlers rind stilt region land GERMICIDES SULTANA GUTS gill siting leans nice spurs tests gloves roused asp Holes! Moles! (Sores!) Hygienists! Scars! (Asses!) Smells spell rares. Cubs instant sing in parse goodies. Rosin. Unhelpful sisal acres. Slope told. MALENESS PASTA LAB. "Infirmary vine," rang illiterates (beans). Rosin sours, insults truss abalones, nailed rules, helical atlases. Dear remodeling stings mar rents. Sunless shiner orb (silly idol.) Clarity disses senna. Vagabonds sauted; sloes performed gelds. Alter post radial lip sectioning gums. Saint Towellings. Larger aeons telephone stolid char, pal! Boats Dean forsook, rosters, tunas, terrariums -- united, traced. Nude pagoda careens.
Язык Пиноккио
Ещё одно итальянское произведение искусства, вдохновившее разработчика, — сказка «Приключения Пиноккио» Карло Коллоди. В эзотерическом языке Pinocchio единственная переменная — «значение носа». Чтобы увеличить его длину, Пиноккио должен произнести ложь, чтобы уменьшить — правду. Вот как это выглядит:
Pinocchio main { dancer.talk(); } Pinocchio dancer { yes(false); # функция Yes заставляет Pinocchio утверждать, что содержимое истинно. Если это не так, его нос увеличивается; если это так, он увеличивается. yes(false); yes(true); # Значение носа этого Pinocchio теперь на 1 больше, чем его начальное значение, 0. }
Hello, World! на языке Pinocchio
Pinocchio main { writeH.talk(); writee.talk(); writel.talk(); writel.talk(); writeo.talk(); writeW.talk(); writeo.talk(); writer.talk(); writel.talk(); writed.talk(); writeLF.talk(); } Pinocchio value { yes(direction.nose == 1); } Pinocchio direction { yes(me.nose == 1); } Pinocchio display { print(value); } Pinocchio.writeH { value.talk(); if (value.nose < 72) { Geppetto.talk(); } display.talk(); } Pinocchio writee { value.talk(); if (value.nose < 101) { Geppetto.talk(); } display.talk(); } Pinocchio writel { if (value.nose < 108) { if (direction.nose == 1) { direction.talk(); } value.talk(); Geppetto.talk(); } if (value.nose > 108) { if (direction.nose == 0) { direction.talk(); } value.talk(); Geppetto.talk(); } if (value.nose == 108) { display.talk(); } } Pinocchio writeo { if (value.nose < 111) { if (direction.nose == 1) { direction.talk(); } value.talk(); Geppetto.talk(); } if (value.nose > 111) { if (direction.nose == 0) { direction.talk(); } value.talk(); Geppetto.talk(); } if (value.nose == 111) { display.talk(); } } Pinocchio writeW { if (direction.nose == 0) { direction.talk(); } value.talk(); if (value.nose > 87) { Geppetto.talk(); } display.talk(); } Pinocchio.writer { if (direction.nose == 1) { direction.talk(); } value.talk(); if (value.nose < 114) { Geppetto.talk(); } display.talk(); } Pinocchio.writed { if (direction.nose == 0) { direction.talk(); } value.talk(); if (value.nose > 100) { Geppetto.talk(); } display.talk(); } Pinocchio.writeLF { value.talk(); if (value.nose > 12) { Geppetto.talk(); } display.talk(); }
Язык, вдохновлённый «Божественной комедией»
Язык Malbolge назван в честь восьмого круга ада Данте, в который попадают в том числе обманщики. Этот эзоланг придумал в 1998 году разработчик Бен Олмстед. Задумка была такая: сделать максимально сложный для программирования ЭЯП. Кажется, у него получилось, потому что первая программа Hello World на Malbolge была создана только в 2000 году с помощью Lisp, а первый квайн — в 2012-м.
Malbolge — машинный язык для интерпретаторов, работающих в троичной системе счисления. Этот эзоланг относится к классу машин с ограниченной памятью, поэтому не может быть полным по Тьюрингу.
Один из вариантов Hello, World! на языке Malbolge
(=<`:9876Z4321UT.-Q+*)M’&%$H»!~}|Bzy?=|{z]KwZY44Eq0/{mlk**hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
Язык по Терри Пратчетту
Шуточный эзотерический язык Ook! отсылает к персонажу серии книг «Плоский мир» Терри Пратчетта — Библиотекарю. Изначально он был человеком, но из-за магического несчастного случая превратился в орангутана.
Язык Ook! — производный от Brainfuck и полный по Тьюрингу. Все инструкции заменены на высказывания орангутана — Ook., Ook? и Ook!. Команды состоят из их комбинаций.
Hello, World! на языке OOK!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.
Шекспировский язык
Shakespeare — один из самых поэтичных эзолангов. Именно таким его задумывали создатели, Карл Хассельстрём и Йон Ослунд. Они хотели разработать ЭЯП с красивым исходным кодом, который выглядит как кусочек пьесы Шекспира.
Список персонажей в начале программы объявляет количество стеков. Они носят имена шекспировских героев, например Ромео, Гамлета или Джульетты. Эти персонажи общаются друг с другом, тем самым совершая операции ввода-вывода. Язык полный по Тьюрингу.
Hello, World! на языке Shakespeare
The Infamous Hello World Program. 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. 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 beautiful as the difference between Romeo and the square of a huge green peaceful tree. Speak thy mind! 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]
Музыкальные эзоланги
Язык «звёздных разработчиков»
Rockstar — эзотерический язык программирования, код которого выглядит как рок-песни. Его создал в 2018 году разработчик и фанат рок-музыки Дилан Битти.
Эзоланг высмеивает фразу rockstar developer («звёздный разработчик»), которую компании часто указывают в вакансиях и при найме на работу в сфере IT. Фарс в том, что если Rockstar — настоящий язык программирования, который легко выучить, то любой, кто захочет потратить на него несколько минут, может по праву называть себя «звёздным разработчиком». Вот здесь хорошо описана история создания языка. Rockstar — тьюринг-полный ЭЯП.
BuzzFuzz на языке Rockstar
Midnight takes your heart and your soul While your heart is as high as your soul Put your heart without your soul into your heart Give back your heart Desire is a lovestruck ladykiller My world is nothing Fire is ice Hate is water Until my world is Desire, Build my world up If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing Shout "FizzBuzz!" Take it to the top If Midnight taking my world, Fire is nothing Shout "Fizz!" Take it to the top If Midnight taking my world, Hate is nothing Say "Buzz!" Take it to the top Whisper my world
Битловский язык
Эзоланг Beatles — выразительный язык программирования, который работает на фразах из песен ливерпульской четвёрки. Например, John выражает истинность значения, где истина — Somewhere man, а ложь — Nowhere man.
Let it be MyBool Is a John MyBool Yeah yeah yeah Somewhere man Skelter MyBool Is Somewhere man Paperback writer 'The statement is true' Helter Paperback writer 'The statement is false'
Одна из возможностей языка Beatles — отправка почты. Для этого можно использовать функции:
WithLove, Hey и Dig a pony: Let it be FromMe Is a Paul Yeah yeah yeah 'me@example.org' Let it be ToYou Is a Paul Yeah yeah yeah 'you@example.org' Let it be Msg Is a Paul Yeah yeah yeah 'This is my test message' Hey WithLove Dig a pony FromMe, ToYou, Msg
Джазовый язык
Рока для одной статьи уже достаточно, и следующий ЭЯП — Velato. В этом эзоланге в качестве исходного кода используются MIDI-файлы, а программы звучат обычно как джазовые мелодии. Любую команду можно записать в виде нот на листе и получить аудиофайл.
Программы в Velato определяются высотой и порядком нот. Возможности эзоланга ограничены специфическим синтезом и структурой, поэтому он не полон по Тьюрингу.
Язык по мемному хиту
В конце — Рик Эстли с его Never Gonna Give You Up. Эзоланг Never Gonna Fuck You Up работает на строчках из этого хита. В 2007 году клип на песню стали использовать для пранков, которые впоследствии стали называть рикроллингом. Жертве розыгрыша отправляли танцующего Рика Эстли под видом другого видео. Так появился мем You’ve been Rick Rolled («Вас отрикроллили»).
Never Gonna Fuck You Up — брейнфакоподобный язык, то есть он полный по Тьюрингу.
Hello, World! от Рика Эстли
Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up We are no strangers to love Never gonna run around and desert you Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up We are no strangers to love Never gonna run around and desert you Never gonna give you up Never gonna give you up Never gonna run around and desert you Never gonna give you up Never gonna give you up Never gonna give you up Never gonna run around and desert you Never gonna give you up Never gonna give you up Never gonna give you up Never gonna run around and desert you Never gonna give you up Never gonna make you cry Never gonna make you cry Never gonna make you cry Never gonna make you cry Never gonna let you down You know the rules and so do I (do I) Never gonna run around and desert you Never gonna give you up Never gonna run around and desert you Never gonna give you up Never gonna run around and desert you Never gonna let you down Never gonna run around and desert you Never gonna run around and desert you Never gonna give you up We are no strangers to love Never gonna make you cry You know the rules and so do I (do I) Never gonna make you cry Never gonna let you down You know the rules and so do I (do I) Never gonna run around and desert you Never gonna run around and desert you Never gonna say goodbye Never gonna run around and desert you Never gonna let you down Never gonna let you down Never gonna let you down Never gonna say goodbye Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up Never gonna give you up Never gonna say goodbye Never gonna say goodbye Never gonna give you up Never gonna give you up Never gonna give you up Never gonna say goodbye Never gonna run around and desert you Never gonna run around and desert you Never gonna say goodbye Never gonna make you cry Never gonna let you down Never gonna say goodbye Never gonna make you cry Never gonna say goodbye Never gonna give you up Never gonna give you up Never gonna give you up Never gonna say goodbye Never gonna let you down Never gonna let you down Never gonna let you down Never gonna let you down Never gonna let you down Never gonna let you down Never gonna say goodbye Never gonna let you down Never gonna let you down Never gonna let you down Never gonna let you down Never gonna let you down Never gonna let you down Never gonna let you down Never gonna let you down Never gonna say goodbye Never gonna run around and desert you Never gonna run around and desert you Never gonna give you up Never gonna say goodbye Never gonna run around and desert you Never gonna give you up Never gonna give you up Never gonna say goodbye
О других ЭЯП можно почитать тут. А если знаете другие эзоланги с отсылками к музыке, кино или литературе, делитесь в комментариях!
ссылка на оригинал статьи https://habr.com/ru/articles/857002/
Добавить комментарий