Ezoterický programovací jazyk

Ezoterický programovací jazyk (zkratka esolang) je takový programovací jazyk, který byl navržen, aby otestoval hranice a možnosti disciplíny programovacích jazyků, důkaz toho, že takový návrh je vůbec možný; nebo jako žert či parodii. Přídomek ezoterický tyto jazyky nosí jako znak toho, že jejich účelem ani záměrem není snaha o jeho široké uplatnění v praxi. To a často i nesrozumitelnost až obtížnost psaní byť i jednoduchých programů je odlišuje od konvenčních programovacích jazyků, jež se krom jiného soustředí i na přehlednost a užitnou hodnotu. Autoři většiny ezoterických programovacích jazyků se nicméně ve svých návrzích snaží o to, aby jejich výtvory byly turingovsky úplné.

Některé ezoterické programovací jazyky

Nejzajímavější ezoterické programovací jazyky a jejich specifika. U některých je uvedena ukázka kódu, většinou programem Hello world.

INTERCAL

INTERCAL je nejstarší ezoterický jazyk, navržený v roce 1972 Done Woodsem a Jamesem M. Lyonem, s jasným úmyslem odlišovat se od ostatních. Obsahuje například klíčové slovo „PLEASE“, které se mohlo vložit před jakýkoli příkaz a které v původní verzi ovlivňovalo „tón“, jímž interpreter oznamoval případné chybové hlášky. Vzdáleně připomíná jazyk symbolických instrukcí.

Brainfuck

Brainfuck je programovací jazyk tvořený toliko 8 příkazy bez parametrů, jimž je přiřazeno 8 nealfanumerických znaků. Programy v Brainfucku tak vypadají jako změť náhodných znaků.

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

FALSE

FALSE je další z ezoterických jazyků, založených na zásobníku a operacích s ním, velmi redukované instrukční sadě, obfuskaci kódu. Zajímavé je též, že má patrně nejmenší kompilátor – do 1024 bajtů.

Příklad na vypsání prvočísel do 100:

99 9[1-$][\$@$@$@$@\/*=[1-$$[%\1-$@]?0=[\$.' ,\]?]?]#

Befunge

Befunge je ezoterický jazyk mající vzdálenou podobnost s Brainfuckem a podobnými. Stejně jako ony je vybaven zásobníkem a příkazy pro práci s ním. Jeho specifikem je to, že běh programu může zdrojovým kódem „cestovat“ podle šipek být navigován.

"dlroW olleH">:v
             ^,_@

Whitespace

Whitespace je jazyk, jehož programy jsou zapisovány s použitím pouze tří znaků, z nichž ani jeden není v textu vidět.

LOLCODE

LOLCODE je jazyk vytvořený jako parodie k internetovému fenoménu „Lolcatz“. Vzdáleně připomíná jazyk C, ale jeho příkazy a klíčová slova jsou často zkomolená.

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

Thue

Thue je ezoterický jazyk s pouhým jedním příkazem se dvěma operandy. Přesto je turingovsky úplný, ba navíc může být použit k rozeznání a definici jazyků úrovně Type-0 Chomského hierarchie.

Piet

Vypsání slova „Piet“ ve stejnojmenném jazyku.

Piet je programovací jazyk, jehož programy jsou čteny/zakódovávány do obrázků o 20 základních barvách. V tomto případě se obor programovacích jazyků snoubí s disciplínou steganografie.

Velato

Velato bere vstup svých programů z rozhraní MIDI, kde pauza mezi nimi určuje každý další příkaz.

Chef

Programy v jazyku Chef (anglicky šéfkuchař) připomínají kuchařské recepty (s tímto úmyslem byl také navržen). Opět zde figuruje zásobník, který je v tomto případě ztělesněn mixérem. Například, vylití jeho obsahu do pekařské formy znamená výňatek obsahu zásobníku a poslání ho na systémový výstup.

Shakespeare

V Shakespeare jsou programy kamuflovány do divadelních her. Scénické poznámky (např. když někdo vstupuje na scénu nebo z ní odchází) slouží jako příkazy nebo direktivy; jiná data jsou pak skryta v použitých slovech (Rozlišuje se například, jsou-li citově neutrální, pozitivní nebo negativní).

Taxi

Programy v ezoterickém jazyku Taxi (podobně jako v Chefu či Shakespearovi) konvenční zdrojový kód nepřipomínají a místo toho vypadají jako kniha jízd či popis instrukcí taxikáře. Jednotlivá místa, kam má zajet, znamenají jednotlivé operace, které má taxikář (běh programu) provést (například pošta znamená standardní vstup/výstup, zajet po práci do garáže znamená ukončit program). Jednotliví cestující, kteří využijí jeho služeb, jsou ve skutečnosti prvky v zásobníku (jejich naložení a vyložení tak představuje operace push a pop). Jména lokací a jim odpovídající příkazy jsou uvedeny v mapě Townsville.

Příklad na vynásobení dvou čísel uživatelským vstupem:

Go to the Post Office: west 1st left, 1st right, 1st left. Pick up a passenger going to Multiplication Station. Pick up another passenger going to Multiplication Station. Go to Multiplication Station: south 1st left, 3rd left. Pick up a passenger going to the Post Office. Go to the Post Office: south 1st left, 3rd right. Go to the Taxi Garage: north 1st right, 1st left, 1st right.

Co je pro Taxi zcela specifické, je to, že programátor musí myslet i na benzín, který musí čas od času tankovat. Pokud tak nebude dělat, program skončí neúspěchem. Tato koncepce je podobná hardwarovému řešení zvanému Watchdog timer, jen v poetičtější podobě.

OstraJAVA

OSTRAJava má za cíl pozvednout kvalitu (nejen ostravského) programování. Na rozdíl od Javy vychází OSTRAJava přímo z mluveného jazyka (ostravského nářečí), tedy z něčeho čemu obyčejní lidé rozumějí. Typický ostravský horník pak nebude mít problém přejít od těžby uhlí ke klávesnici. Jazyk tak mimo jiné řeší i problém nezaměstnanosti v Moravskoslezsku.

Odkazy

Reference

V tomto článku byl použit překlad textu z článku Esoteric programming language na anglické Wikipedii.

Externí odkazy

Média použitá na této stránce

Piet Program.gif
Autor: Thomas Schoch, Licence: CC BY-SA 3.0
Program in the Piet programming language, printing "Piet"