Esoterické programovací jazyky
Definice esoterického programovacího jazyka, neboli esolangu, je velmi vágní. V podstatě je to cokoliv, co bylo myšleno jako žert, parodie či pouze ověření nějaké domněnky. Pro lepší názornost uvedu několik příkladů.
Feta
Prvním jazykem, který si ukážeme, je Feta:
- pouze jedna instrukce: WRITE
- pokud uživatel zadá WRITE, vypíše H3110 W0R1D do souboru "0WTPWT.txt"
- pokud uživatel zadá cokoliv jiného, program nevypíše nic
Tento jazyk lze implementovat opravdu spoustu způsoby, jakýkoliv jazyk je vhodný (kromě Fety...). Zde přidávám odkaz na wiki jazyka Feta: https://esolangs.org/wiki/Feta
Ukázka kódu
Tento kód tedy vypíše H3110 W0R1D do souboru "0WTPWT.txt":
WRITE
Trumpscript
Ať už jste příznivci nebo odpůrci, neberte to nijak politicky zabarvené, jen se bavte. Vlastnosti Trumpscriptu jsou takové:
- v tomto jazyku musí mít všechny číselné hodnoty více, než milion
- místo
True
aFalse
jazyk obsahujeFact
aLie
- errorové hlášky jsou přímo Trumpovy výroky
- nesmíte mít více souborů ani žádný IMPORT, Trump neuznává nic, co si Američané sami nenakódí v USA
- každý program musí končit America is great!
Odkaz na github jazyka: https://github.com/…/TrumpScript
Ukázka kódu
Zde je jeho implementace, která se dost rozrostla, takže třeba sama někdy v tichosti vypne a nikomu nic neřekne atd...
What are we in this country Hillary speaks nothing but lies But look at me I came to this election to make guys believe again believe in fact if, all of us real lies the light; : say "VOTE TRUMP" ! but I know we should be free else the result will be bad: all the work of George Washington was for nothing so this election say "Hello World" say "TRUMP FOR PRESIDENT"! America is great.
Danica
Příklad omezeného jazyka s pekelným vstupem pro programátora je Danica.
- Danica umí jen 5 příkazů:
- Print (vypiš),
- Compare (porovnej),
- Read (přečti),
- Greater (je větší) a
- Smaller (je menší)
- celý vstup se jí musí předat v F-kách.
Ukázka kódu
Zde je příklad programu "Hello world!":
ffffffffffffffff ffffffffffffffff ffffffff ffffffffffffff fffffffffffffffffff hello world!
Jazyk se zakóduje pomocí jednoduchého pravidla. Umístění v abecedě = počet f:
a = f b = ff c = fff d = ffff e = fffff f = ffffff g = fffffff h = ffffffff i = fffffffff . . .
Příklad interpreteru je zde: https://raw.githubusercontent.com/…terpreter.py
Nil
Představuji nihilistický programovací jazyk. Ať mu dáte jakýkoliv vstup, on ho ignoruje.
Ukázka kódu
Validní kód:
Život plyne a smrt je stále blíž a blíž... A pak přijde prázdnota...
Ummm...
Tento jazyk je vhodný pro ty, co zapomínají. Tento jazyk je na tom podobně.
- Má dva příkazy:
S
aP
S
vzbudí program ze spánkuP
vytiskne výstup... Poslední slovo však zapomene a místo něj vytiskneummm...
- Pokud to budete chtít obejít a vytisknout jen jedno slovo, program zase usne...
Ukázka kódu
S P "Hello, world!"
TroJavaScript
Tento jazyk má úplně stejnou syntax jako Javascript, ale obsahuje trojského koně, takže dělá věci, které programátor nezamýšlel... Kód zde z bezpečnostních důvodů neukážeme.
Huby
Jazyk vhodný pro výuku programování pro věčné začátečníky.
- Každá funkce v jazyce Huby musí mít název, závorky a určitý počet
parametrů, třeba
h();
- Každý příkaz musí být ukončen středníkem, třeba
h();
- Je to interpretovaný jazyk, takže není potřeba zavádět třídy,
importy ani nic podobného
- Toto je třeba validní kód v tomto jazyce:
h();
- Toto je třeba validní kód v tomto jazyce:
- A to je vše
Ano, tento jazyk umí jen jednu funkci - h();
, která vypíše
Hello World!
Ukázka kódu
Překvapivě bude ukázka kódu pouze funkce h();
h();
Cheese++
Tento programovací jazyk má úplnou syntaxi, jen trochu pozměněnou...
Cheese
=Begin
({
)NoCheese
=End
(}
)Wensleydale()
=Print
(tiskni do konzole)Swiss
= uvozovky, vždy musí předcházet a následovat textovému řetězciGlyn(operation)
= to je funkce, která dosazuje hodnotu (viz níže)Cheddar...Coleraine
=repeat ... until
Stilton...Blue...White
=if ... then...else
Belgian
= vytiskne celý program do konzoleBrie
= ukončuje řádku, část kódu
Ukázka kódu
Příklad programu "Hello world!":
Cheese Wensleydale(SwissHello World!Swiss)Brie NoCheese
Deklarace proměnné:
Glyn( // uvozuje deklaraci VarName(value) // deklaruje proměnnou VarName s hodnotou 'value' ) Brie // ukončovací znak (jako středník)
Snížení hodnoty proměnné o 1:
Glyn(VarName = Varname - 1)Brie
Tento jazyk zatím kompiler nemá, ale přesto má dobře udělanou stránku na wiki, tak sdílím odkaz: https://esolangs.org/…Cheese%2B%2B
evil
Abychom zakončili naše příklady něčím opravdu složitým, zde je jazyk evil. Tento jazyk je prostě evil...
Ukázka kódu
Ukázka klasického programu Hello, world!
:
zaeeeaeeew (H) zaeeaeeaeaw (e) zuueeueueaw (l) zuueeueueaw (l) zuueeueew (o) zuueeaeeeaw (,) zaeeeeew ( ) zuueeueeeew (w) zuueeueew (o) zuueeueeaaaw (r) zuueeueueaw (l) zaeeaeeaew (d) zaeeeeeaw (!) zaeeuuuw (\r) zaeaaaaaaw (\n)
Je to příklad opravdu propracovaného jazyka, pro zájemce doporučuji nahlédnout, ale nepokoušet se pochopit...: https://esolangs.org/wiki/Evil
Populární problémy, co mají esoterické jazyky vyřešit
Po úvodu a ukázkách kódu přichází zhodnocení. Jak poznat že můj esoterický jazyk je kvalitní? Někdy stačí, že je vtipný, viz. Cheese++. Někdy stačí, že je minimalistický. Přesto je ale několik úloh, které chceme, aby esoterické jazyky měly:
- Každý slušný jazyk by měl vypsat
Hello world!
- Je super, pokud jazyk umí vypsat sám sebe (svůj zdrojový kód) tzv. Quine
- Je super, pokud jazyk umí vypsat vstupní parametry na výstup, tzv. Cat (přečti 3 a vypiš 3)
Pokud byste někdy rádi vytvořili vlastni esoterický jazyk, meze se nekladou. Pokud by byl zájem, můžeme si takovou tvorbu ukázat