Přeskočit na obsah

Ezoterický programovací jazyk

Z Wikipedie, otevřené encyklopedie

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

[editovat | editovat zdroj]

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 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 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 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 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

[editovat | editovat zdroj]

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 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 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.

Image
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 bere vstup svých programů z rozhraní MIDI, kde pauza mezi nimi určuje každý další příkaz.

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

[editovat | editovat zdroj]

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í).

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 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.

/// (čti „slashes“, česky „lomítka“) je programovací jazyk vytvořený Tannerem Swettem roku 2006, založený na textových substitucích. Údajně má být „nejjednodušším jazykem na světě“. Přesto je Turingovsky úplný.

Syntaxe je velmi jednoduchá:

  • Znak '\' se napíše před znak '\' nebo '/', pokud má být tento vypsán, jinak je ignorován.
  • Znak '/' umožňuje náhradu řetězců následujícím způsobem: /jeden řetězec/druhý řetězec/
  • Ostatní znaky jsou vypsány, pouze řetězce, ke kterým je v daném řádku definována náhrada, jsou nahrazeny.[1]

Program typu Hello world:

Hello, world!

Jazyk REGXY se od /// liší použitím regulárních výrazů. Kromě příkazu pro náhradu ve formátu navesti/vyraz/nahradit/ zde existuje také rozhodovací příkaz navesti/vyraz/cil (bez lomítka na konci).

Sceql používá pro ukládání dat frontu typu FIFO. Má osm následujících příkazů:

= Prvek z konce fronty přesune na její začátek.
- Dekrementuje prvek na konci fronty.
_ Inkrementuje prvek na konci fronty.
\ Začátek cyklu opakovaného, dokud je prvek na konci fronty různý od nuly.
/ Konec cyklu.
! Přidá nulový prvek na začátek fronty.
& Uloží vstup na začátek fronty.
* Vypíše prvek na konci fronty a přesune jej na její začátek.

Fueue je dalším zástupcem jazyků založených na frontě, kterou je přímo zdrojový kód. Jeho autorem je Nathan von Doorn. Programy v něm se píšou všemi znaky. Příkazy jsou následující:

+ Sečte dva prvky na konci fronty.
- Odečte dva prvky na konci fronty.
* Vynásobí dva prvky na konci fronty.
/ Vydělí dva prvky na konci fronty.
% Pokud je na konci fronty 0, změní na 1, ostatní hodnoty na 0.
: Zkopíruje konec fronty na její začátek.
~ Přesune dva prvky z konce fronty na její začátek v opačném pořadí.
! Odstraní prvek na konci fronty.
$ Prvek na konci fronty zkopíruje n-krát na začátek fronty (za znak $ uvádíme číslo).
( Začátek blokového režimu.
< Přidání hodnoty do bloku.
) Konec blokového režimu, blok se uloží na začátek fronty.
H Konec programu.
číslo ASCII znak daný tímto číslem se vypíše. Znaky se oddělují mezerami.
jiný Ostatní znaky/hodnoty se vrátí na začátek fronty.

Pokud se fronta po jejím celém provedení nezmění, automaticky následuje uživatelský vstup jednoho znaku, který se uloží na začátek fronty.

Program typu Hello world:

72 101 108 108 111 44 32 119 111 114 108 100 33 10 H

NULL je programovací jazyk, v němž se zapisuje celý program jediným číslem. Obsahuje vnitřní proměnné x (na začátku zdrojový kód) a y (na začátku 1). Pokaždé je x vyděleno jeho nejmenším prvočinitelem, y je stejným číslem naopak vynásobeno a zároveň je proveden příkaz odpovídající danému prvočíslu, přičemž data se ukládají do tří front. Cyklus se opakuje do příkazu 43.

2 Přepne na další frontu.
3 Přepne na předchozí frontu.
5 Vypíše ASCII znak podle posledního prvku vybrané fronty.
7 Přečte ASCII znak na začátek vybrané fronty.
11 Dekrementuje prvek na konci vybrané fronty, pokud není nulový.
13 Zvýší proměnnou y o poslední prvek vybrané fronty.
17 Zvýší poslední prvek vybrané fronty o y modulo 256.
19 Přesune prvek z konce vybrané fronty na začátek další fronty.
23 Přesune prvek z konce vybrané fronty na začátek předchozí fronty.
29 Odstraní prvek z konce vybrané fronty.
31 Vloží y modulo 256 na začátek vybrané fronty.
37 Pokud je vybraná fronta prázdná nebo má na konci nulu, vydělí x jeho nejmenším prvočinitelem a y jím vynásobí.
41 Prohodí x a y.
43 Ukončí program.
47+ Nedělá nic.

V jazyce Seed, považovaném za jeden z nejsložitějších programovacích jazyků vůbec, se zapisuje program dvěma čísly. První inicializuje generátor pseudonáhodných čísel a druhé určuje počet generovaných znaků, které jsou následně interpretovány v jazyce Befunge. Vytvoření konkrétní aplikace je tak téměř nemožné.

Feta má pouze jediný příkaz, a to WRITE, který vypíše „H3110 W0R1D“ do souboru „0WTPWT.txt“. Ostatní slova jsou ignorována. Například tento kód vypíše do souboru „0WTPWT.TXT“ text „H3110 W0R1DH3110 W0R1DH3110 W0R1D“:[2]

WRITE
WRITE
WRITE

Trumpscript

[editovat | editovat zdroj]

Jazyk Trumpscript jako vtipná reakce na politiku Donalda Trumpa je založen na pěti hlavních pravidlech:

  • Všechny číselné hodnoty musí být větší než milion.
  • Místo True a False jsou zde klíčová slova Fact a Lie.
  • Chybové hlášky jsou inspirovány slavnými Trumpovy výroky.
  • Nelze mít více souborů ani žádné importy.
  • Každý program musí končit větou America is great!

Danica má pouze pět příkazů: Print, Read, Compare, Greater, Smaller. Písmena se navíc zapisují počtem znaků 'f'. Například Hello world vypadá takto:

ffffffffffffffff ffffffffffffffffff fffffffff ffffffffffffff ffffffffffffffffffff Hello, world!

Extrémně minimalistický (až nihilistický) programovací jazyk, který všechny znaky ignoruje.

Jazyk Ummm... má dva příkazy. Příkaz S probudí program (musí se použít vždy na začátku). Příkaz P vypíše řetězec, přičemž poslední slovo „zapomene“ a vypíše místo něj „ummm...“. Při výpisu pouze jednoho slova program opět usne. Hello world vypadá takto:

S
P "Hello,"
S
P "world!"

Ale Hello ummm... je podstatně jednodušší, například:

S
P "Hello, world!"

TroJavaScript

[editovat | editovat zdroj]

Jazyk má stejnou syntaxi jako JavaScript, ale příkazy dělají úplně jiné věci. Název odkazuje na trojské koně, programy pod jejich vlivem totiž (záměrně) dělají jiné než zamýšlené věci.

Tento jazyk má pouze příkaz „h();“, který vypíše „Hello, world!“.

Jazyk Cheese++ je Turingovsky úplný, ale klíčová slova má v podobě názvů různých druhů sýrů.

Cheese začátek programu
NoCheese konec programu
Wensleydale(...) výpis řetězce
Swiss ohraničení textového řetězce
Glyn(... = ...) deklarace proměnné
Cheddar ... Coleraine ... opakování (repeat ... until ...)
Stilton ... Blue ... White ... podmínka (if ... then ... else ...)
Belgian výpis zdrojového kódu
Brie musí se uvést za každým příkazem

Hello world:

Cheese
  Wensleydale(SwissHello, world!Swiss)Brie
NoCheese

Quine:

Cheese
  BelgianBrie
NoCheese

Jazyk evil je poněkud složitý jazyk s 26 příkazy, které se zapisují všemi malými písmeny. Velká písmena a jiné znaky jsou ignorovány, což umožňuje jednoduše psát komentáře velkými písmeny (znaky v závorkách jsou ale také ignorovány). Proměnné se ukládají do jednoho akumulátoru a dvou kruhových polí. Více viz samostatný článek.[3]

Rockstar vznikl v roce 2018, údajně aby manažeři lidských zdrojů v oblasti IT nemuseli falešně používat spojení „rockstar developer“. Má být v duchu rockových písní 80. let, je dynamicky typovaný, může být kompilovaný i interpretovaný, existují implementace v C, C#, Pythonu, Javě, JavaScriptu a dalších jazycích. Soubory mají příponu .rock. Více viz samostatný článek.[4]

V tomto článku byl použit překlad textu z článku Esoteric programming language na anglické Wikipedii. Také zde byly použity následující zdroje:

  1. TIŠNOVSKÝ, Pavel. Programovací jazyky z vývojářského pekla (ABEND). Root.cz [online]. [cit. 2026-03-12]. Dostupné online.
  2. MICHÁLEK, Ondřej. Esoterické programovací jazyky. www.itnetwork.cz [online]. [cit. 2026-03-12]. Dostupné online.
  3. evil - Esolang. esolangs.org [online]. [cit. 2026-03-12]. Dostupné online.
  4. PETROVAJ, Martin. Staňte sa Rockstar Developerom!. www.itnetwork.cz [online]. [cit. 2026-03-12]. Dostupné online.

Externí odkazy

[editovat | editovat zdroj]