Esoterický programovací jazyk - Esoteric programming language

Esoterický programovací jazyk (někdy se zkrátil k esolang ) je programovací jazyk navržený pro testování hranice počítačového programovacího jazyka designu, jako důkaz pojetí , jak softwarové techniky , jako vniknutí do rozhraní do jiného jazyka (zvláště funkcionální programování nebo procedurálních programovacích jazyků ), nebo jako vtip. Použití esoteriky odlišuje tyto jazyky od programovacích jazyků, které pracující vývojáři používají k psaní softwaru. Tvůrci esolangu obvykle nemají v úmyslu použít jazyk pro běžné programování, ačkoli některé esoterické funkce, jako je například vizuálně prostorová syntaxe , inspirovaly praktické aplikace v umění. Tyto jazyky jsou často populární mezi hackery a fandy.

Použitelnost je zřídka cílem esoterických návrhářů programovacích jazyků - často design vede k úplnému opaku. Jejich obvyklým cílem je odstranit nebo nahradit konvenční jazykové funkce při zachování jazyka, který je Turingově úplný , nebo dokonce jazyka, u kterého není výpočetní třída známa.

Dějiny

Nejranějším a stále kanonickým příkladem esoterického jazyka je INTERCAL , navržený v roce 1972 Donem Woodsem a Jamesem M. Lyonem, s deklarovaným záměrem být na rozdíl od jakéhokoli jiného programovacího jazyka, který autoři znali. To parodoval prvky zavedených programovacích jazyků na den, jako Fortran , COBOL a assembleru .

Společnost INTERCAL byla po mnoho let zastoupena pouze papírovými kopiemi příručky INTERCAL. Oživení jazyka v roce 1990 jako implementace v C pod Unixem vyvolalo vlnu zájmu o záměrný design esoterických počítačových jazyků.

V roce 1993 vytvořil Wouter van Oortmerssen FALSE, malý programovací jazyk orientovaný na stack , se syntaxí navrženou tak, aby byl kód inherentně zmatený, matoucí a nečitelný. Má také kompilátor pouze 1024 bajtů. To inspirovalo Urbana Müllera k vytvoření ještě menšího jazyka, nyní nechvalně proslulého brainfucku , který se skládá pouze z osmi uznávaných postav. Spolu s Befunge od Chris Pressey (jako FALSE, ale s dvojrozměrným ukazatelem instrukcí) je nyní brainfuck jedním z nejlépe podporovaných esoterických programovacích jazyků. Toto jsou kanonické příklady minimálních Turingových tarpitů a zbytečně zmatených jazykových funkcí. Brainfuck souvisí s P '' rodiny Turing stroje .

Příklady

Befunge

Befunge umožňuje, aby se ukazatel instrukce pohyboval ve více dimenzích prostřednictvím kódu. Například následující program zobrazí „Hello World“ stlačením znaky v obráceném pořadí do zásobníku, tisk se znaky ve smyčce, která cirkuluje ve směru hodinových ručiček přes pokyny >, :, v, _, ,a ^.

 "dlroW olleH">:v
              ^,_@

Binární lambda kalkul

Binární lambda kalkul je navržen z pohledu algoritmické teorie informací tak, aby umožňoval co nejhustší kód s co nejmenšími prostředky, představující 29bajtový automatický tlumočník, 21bajtové síto prvočísel a 112bajtový interpret Brainfuck.

Kurva

Brainfuck je navržen pro extrémní minimalismus a vede k zamlženému kódu s programy obsahujícími pouze osm odlišných znaků. Následující výstup programu „Hello World!“:

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

Šéfkuchař

Chef by David Morgan-Mar je programovací jazyk orientovaný na hromadu, který má programy vypadat jako recepty na vaření. Programy se skládají z názvu, seznamu proměnných a jejich datových hodnot a seznamu pokynů pro manipulaci se zásobníkem. Princip vtipkování říká, že „programové recepty by neměly generovat pouze platný výstup, ale měly by být snadno připravitelné a chutné“, a Morgan-Mar poznamenává, že příklad programu Hello World s „101 vejci“ a „111 šálky oleje“ by produkoval „ hodně jídla pro jednu osobu. “

FRACTRAN

Program FRACTRAN je uspořádaný seznam kladných zlomků spolu s počátečním kladným celočíselným vstupem . Program se spouští vynásobením celého čísla prvním zlomkem v seznamu, pro který je celé číslo. Celé číslo se pak nahradí a pravidlo se opakuje. Pokud žádný zlomek v seznamu nevytvoří celé číslo při jeho vynásobení, pak se program zastaví. FRACTRAN vynalezl matematik John Conway .

GolfScript

Programy v GolfScriptu se skládají ze seznamů položek, z nichž je každý vložen do zásobníku, jak se s ním setká, s výjimkou proměnných, jejichž hodnotou jsou bloky kódu, v takovém případě je kód spuštěn.

INTERCAL

INTERCAL , zkratka pro „Compiler Language With No Pronounceable Acronym“, byl vytvořen v roce 1972 jako parodie k satirizaci aspektů tehdejších různých programovacích jazyků.

JSFuck

JSFuck je esoterický programovací styl JavaScript, kde je kód napsaný pouze pomocí šesti znaky: [, ], (, ), !a +. Na rozdíl od Brainfuck, který vyžaduje vlastní překladač nebo tlumočník, je JSFuck platný kód JavaScript, což znamená, že programy JSFuck lze spouštět v jakémkoli webovém prohlížeči nebo motoru, který JavaScript interpretuje.

LOLCODE

LOLCODE je navržen tak, aby připomínal řeč lolcatů . Následuje příklad „ahoj svět“:

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

LOLCODE je často kritizován za to, že není příliš esoterický, ale spíše je to obyčejný procedurální jazyk s neobvyklou slovní zásobou.

Malbolge

Malbolge (8. kruh pekla) byl navržen jako nejtěžší a esoterický programovací jazyk. Mezi dalšími funkcemi je kód, který se záměrně sám upravuje, a účinek instrukce závisí na její adrese v paměti.

Piet

Program Piet, který tiskne „Piet“
Program „Hello World“ v Pietu

Piet je jazyk navržený Davidem Morganem-Marem , jehož programy jsou bitmapy, které vypadají jako abstraktní umění . Kompilace je vedena „ukazatelem“, který se pohybuje po obrázku, z jedné souvislé barevné oblasti do druhé. Procedury se provádějí, když ukazatel opustí oblast.

Chování je specifikováno u 20 barev: 18 „barevných“ barev, které jsou seřazeny podle 6stupňového cyklu odstínu a 3stupňového cyklu jasu; a černobílé, které nejsou objednány. Při opuštění „barevné“ barvy a zadání jiné barvy je provedený postup určen počtem kroků změny odstínu a jasu. Nelze zadat černou; když se ukazatel pokusí zadat černou oblast, místo toho se změní pravidla pro výběr dalšího bloku. Pokud jsou vyzkoušena všechna možná pravidla, program se ukončí. Oblasti mimo okraje obrázku jsou také považovány za černé. White neprovádí operace, ale umožňuje ukazateli „projít“. Chování barev jiných než uvedených 20 je ponecháno na kompilátoru nebo tlumočníkovi.

Proměnné jsou uloženy v paměti jako celá čísla se znaménkem v jednom zásobníku . Většina zadaných procedur se zabývá operacemi na tomto zásobníku, jiné vstupem/výstupem a pravidly, podle kterých se ukazatel kompilace pohybuje.

Piet byl pojmenován po nizozemském malíři Piet Mondrian . Původně zamýšlený název Mondrian byl již použit pro open-source statistický systém vizualizace dat.

Shakespeare

Shakespeare je navržen tak, aby programy vypadaly jako shakespearovské hry. Následující příkaz například deklaruje bod v programu, kterého lze dosáhnout pomocí příkazu typu GOTO:

Act I: Hamlet's insults and flattery.

Unlambda

Unlambda je minimalistický funkční programovací jazyk založený na SKI kalkulu , ale kombinovaný s prvotřídními pokračováními a imperativním I/O (se vstupem obvykle vyžadujícím použití pokračování).

Prázdné místo

Prázdný prostor používá pouze prázdné znaky (mezera, tabulátor a návrat), přičemž ignoruje všechny ostatní znaky, které lze tedy použít pro komentáře. Toto je opak mnoha tradičních jazyků, které nerozlišují mezi různými znaky prázdných znaků, přičemž tabulátor a mezera jsou stejné. Umožňuje také skrytí programů Whitespace ve zdrojovém kódu programů v jazycích jako C.

Kulturní kontext

Kulturní kontext esolangů studoval Geoff Cox, který píše, že esolangy „přesouvají pozornost od velení a řízení ke kulturnímu projevu a odmítání“, přičemž esolangy vidí jako podobné kódovému umění a kódové poezii, jako je mezangelle Mez Breeze . Daniel Temkin popisuje Brainfuck jako „odmítající uvolnit hranici mezi lidským výrazem a kódem montáže a tím nás přivést na směšnou cestu logiky“, čímž odhaluje inherentní konflikt mezi lidským myšlením a počítačovou logikou. Spojuje programování v rámci esolangu s prováděním skóre událostí, jako je hnutí Fluxus , kde hraní pravidel logiky v kódu dává jasně najevo úhel pohledu na jazyk.

Reference

Další čtení

externí odkazy