Zábava (a Šílenství) Esoterické Programovací Jazyky

esoterický programovací jazyk je programovací jazyk navržen tak, aby napadnout normy jazyka designu. Je to jazyk určený k tomu, aby se vyjádřil. Bod může být cokoliv: výzva sama vytvořit něco neobvyklého, což propracovaný vtip, vytváření jazyka, jako uměleckého vyjádření, testování slibných nápadů pro programování, atd.

to by mělo objasnit, že neexistuje snadný způsob, jak správně kategorizovat nebo organizovat všechny různé esoterické programovací jazyky, protože podle definice odporují pravidlům. Ale mohli bychom použít některé koncepty a organizační principy, abychom získali lepší představu o komunitě kolem nich. Abychom mohli pochopit, k čemu je lidé používají, nebo použít tyto informace jako inspiraci k vytvoření vlastního esoterického jazyka.

Některé Užitečné Pojmy

Turing Tarpit

Turing tarpit je programovací jazyk, který je Turing-kompletní, ale prakticky nepoužitelný. Turing-kompletní jazyk může simulovat jakýkoli Turing-stroj. Z praktického hlediska můžete s ním napsat jakýkoli program. Takže teoreticky všechny tyto jazyky jsou stejně silné, ale ty, které jsou také Turing Tarpit, aby to neuvěřitelně těžké napsat jakýkoliv program. Běžným způsobem, jak toho dosáhnout, je snížit počet dostupných symbolů: zkuste napsat i program Hello World s pouze 8 znaky.

Quine

quine je program, který produkuje jako výstup kopii svého zdrojového kódu. Program nemůže být prázdný program, i když prázdný program je platný program v konkrétním jazyce. Čtení zdrojového kódu z disku nebo paměti je také považováno za podvádění. Jméno „quine“ vytvořil Douglas Hofstadter ve své knize Gödel, Escher, Bach: věčný Zlatý cop, na počest filozofa Willarda Van Ormana Quinea. Koncept quine tedy není pro esoterické programovací jazyky jedinečný,ale přesto je typickou první výzvou, kterou je třeba při psaní překonat.

Kód Golf

kód golf je typ soutěže, ve které cílem je napsat co nejkratší program, který realizovat určitý algoritmus. V této souvislosti nejkratší znamená mít nejkratší zdrojový kód. To neznamená, že má menší velikost binárního spustitelného kódu. Hrací kód golf se nazývá „Golf scripting“. Existují také všechny ostatní druhy soutěží souvisejících s programováním, které vzhledem k publiku často podporují kreativní podvádění. Obecně řečeno výzva je motivujícím faktorem pro mnoho esoterických programovacích jazyků.

Mlžení

koncept dezinformace, který je říci, skrýt skutečný význam poselství, samozřejmě není exkluzivní k esoterické programovací jazyky, nebo dokonce programování obecně. Má však velký význam v mnoha esoterických programovacích jazycích. Zvláště pokud to máte v úmyslu ve větším obecném smyslu zavádějící nebo matoucí příjemce. Neskrýváte zprávu, protože zpráva sama o sobě je důležitá, ale protože skrytá forma je sama o sobě cílem. Typickým způsobem, jak toho dosáhnout, je minimalizace počtu symbolů jazyka, ale můžete také maskovat programovací jazyk v tom, co vypadá jako normální text nebo obrázek.

Non-Determinismus

V tomto širším smyslu zavádějící nebo matoucí publikum, non-determinismus může být také použit k dosažení stejného cíle. Nedeterministický jazyk je jazyk, pro který vzhledem k současnému stavu programu nelze vždy předvídat další stav. Koncept má určité použití v běžných programovacích jazycích, v podstatě kvůli nepředvídatelným podmínkám v době běhu. Ale to je přijato do extrému určitými esoterickými programovacími jazyky, randomizací proměnných nebo dokonce randomizací samotných instrukcí.

skupiny esoterických programovacích jazyků

jak jsme již řekli, nemůžeme poskytnout vyčerpávající způsob organizace všech esoterických programovacích jazyků. A i kdyby to někdo mohl najít, brzy by někdo jiný vynalezl nové esoterické programovací jazyky, jen aby to bylo neplatné. Snažíme se tedy jednoduše nabídnout některým skupinám nebo kategoriím, abychom lépe porozuměli a prozkoumali svět esoterických programovacích jazyků.

  • jazyky s objektivní hodnotou, i když tato hodnota nemusí být nutně vnější nebo typická. Základním příkladem je jazyk určený k vítězství v soutěži code golf: jeho hodnota může být měřena, ale nemá žádný význam mimo komunitu esoterických programovacích jazyků. Ale mnohem užitečnější druhu jsou ty, jejichž cílem je dosáhnout neobvyklý cíl, například obejít bezpečnostní opatření (viz JSFuck) nebo definovat jazyky Typu 0 v Chomského hierarchii (viz Thue).
  • nepoužitelné jazyky. Jedná se o jazyky, které jsou velmi náročné na používání. To může být výslovným cílem designéra nebo jednoduše nehodou samotného designu. Uživatel může dokonce najít zábavu pro jejich použití na nějakou dobu. Typickým způsobem, jak dosáhnout nepoužitelného jazyka, a to jak designem, tak náhodou, je Minimalismus (viz Brainfuck). Ale pokud chcete něco téměř nemožné použít, potřebujete něco jako jazyk, který používá ternární systém a záměrně se sám mění, mimo jiné (viz Malbolge).
  • jazyky pro testování nápadu nebo prokazování něčeho. Jedná se o jazyky, které nemusí být přímo užitečné,ale jsou dobrým testovacím místem pro nový koncept nebo něco dokázat. Například, jazyk, ve kterém programy jsou uspořádány do dvourozměrné mřížky (viz Befunge) nebo téměř čistě funkcionální jazyk (viz Unlambda)
  • Umělecké jazyky. Jedná se o jazyky, které jsou navrženy s myšlenkou mít nějakou uměleckou hodnotu. Dalo by se namítnout, že jsou fakticky součástí buď skupiny testovacích jazyků, nebo jazyků s objektivní hodnotou. Dáme je do jiné kategorie, protože nevypadají jako programování, ale oni mají tendenci vypadat zajímavě, i když možná nebudete chtít používat. Například vypadají jako abstraktní umění (viz Piet) nebo jako Shakesperova hra (viz Shakespeare).
  • vtipy jazyky. Jsou to jazyky vymyšlené lidmi s podivným smyslem pro humor. Jako člověk, který říká: „chcete slyšet vtip? – pak čte válku a mír, než uzavře-celý náš život je vtip!“. Příkladem je satirický jazyk, kde je i referenční příručka je vtip (viz INTERCAL)

Některé Pozoruhodné Esoterické Jazyky

samozřejmě to není vyčerpávající seznam významných esoterické programovací jazyky, ale skromněji seznam několika významných pro jejich úspěch či zvláštností.

Befunge

hlavní esoterické funkce Befunge je, že programy jsou uspořádány do dvourozměrné mřížky. Je to také zásobník založený a reflexní jazyk, takže umožňuje programu změnit sám. Hlavním cílem bylo navrhnout jazyk, pro který bylo co nejtěžší vytvořit kompilátor.

původní verze, nyní nazývaná Befunge-93, není Turing úplná, protože omezuje velikost mřížky 80×25. Nová verze, nazvaná Befunge-98, však tento limit odstraňuje a měla by být Turing kompletní. Befunge vytvořil celou třídu vícerozměrných jazyků, nazývaných Fungeoid.

Befunge má příkazy, které řídí směr nahoru, dolů, vlevo, vpravo, a tak může také vytvořit cyklus, spolu s tradiční příkazy pro výstup, binární operace, atd.

program Hello Word vypadá takto.

> vv ,,,,,"Hello"<>48*, vv,,,,,,"World!"<>25*,@

Brainfuck

pravděpodobně nejslavnější ze všech esoterických programovacích jazyků, je pozoruhodný svým extrémním minimalismem. A to jak v počtu dostupných příkazů, tak i ve velmi malém kompilátoru. Ve skutečnosti je druhá podmínka důvodem pro první, protože autor chtěl vytvořit jazyk s nejmenším možným kompilátorem. Autor vytvořil kompilátor, který používal pouze 240 bajtů. Někdy později někdo jiný vytvořil jeden s pouhými 100 bajty. Přirozeným důsledkem tohoto cíle je, že jazyk je těžko použitelný, i když je Turing úplný. Stručně řečeno, jedná se o Turingovu plachtu.

je někdy označován cenzurovaným pravopisem, jako je Brainf * ck nebo mnoho jiných variací.

jazyk se skládá z osmi různých příkazů, které manipulují s ukazatelem dat a dvěma proudy bajtů pro vstup a výstup. Podporuje také smyčky. Jiné znaky, kromě těch, které představují příkazy, jsou kompilátorem považovány za komentáře a ignorovány.

Toto je příklad toho, jak jazyk funguje (převzato z Esolangs wiki).

Code: Pseudo code:>> Move the pointer to cell2 Set cell2 to 0 << Move the pointer back to cell0 End while

program Hello World vypadá takto.

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

Chcete-li se dozvědět více, můžete vidět na odpovídající stránce Wikipedie nebo Esolangs.

INTERCAL

INTERCAL nemusí být na první esoterický programovací jazyk, ale je to určitě první slavný. Kolik je to let? Byl vytvořen v roce 1972 a první implementace byla provedena s děrovanými kartami. Jazyk byl zamýšlen jako parodie, ale také vytvořit něco zcela nového, cizího programovacího světa. Název není podle autorů zkratkou:

celý název kompilátoru je „překladač jazyk bez vyslovitelné zkratky,“ který je, ze zřejmých důvodů, zkráceně “ INTERCAL.“

zbytek INTERCAL Reference Manual (formát PS) je také plný nesmyslných nebo vtipných prohlášení. To je jak pro jazyk, který popisují, tak pro to, jak to dělají. Například tohle je sekce na Proměnné

INTERCAL umožňuje pouze 2 různé typy proměnných, 16-bitové celé číslo a 32-bit celé číslo. Tyto
jsou reprezentovány bodem ( . ) nebo dvoubodový (:), následovaný libovolným číslem mezi 1 a 65535,
včetně. Tyto proměnné mohou obsahovat pouze nezáporná čísla; mají tedy příslušné rozsahy hodnot
: 0 na 65535 a 0 na 4294967295. Poznámka: .123 a: 123 jsou dvě odlišné proměnné. Na druhou stranu
.1 a .0001 jsou identické. Kromě toho nesmí být zapsán jako 1E-3 .

jazyk také umožňuje použití modifikátoru PLEASE. Vyžaduje však také použití správného množství tohoto klíčového slova. Nelze jej použít příliš málo nebo příliš mnoho, to znamená, že musíte prokázat správné množství zdvořilosti. Opravdu neveselá část je, že to byla nezdokumentovaná funkce v původní příručce. Vtip manuál pro vtip manuál může být v pořádku, ale ten, že je neúplný je nepřijatelné.

Toto je Hello World ve verzi INTERCAL implementované S C: C-INTERCAL.

DO ,1 <- #13PLEASE DO ,1 SUB #1 <- #238DO ,1 SUB #2 <- #108DO ,1 SUB #3 <- #112DO ,1 SUB #4 <- #0DO ,1 SUB #5 <- #64DO ,1 SUB #6 <- #194DO ,1 SUB #7 <- #48PLEASE DO ,1 SUB #8 <- #22DO ,1 SUB #9 <- #248DO ,1 SUB #10 <- #168DO ,1 SUB #11 <- #24DO ,1 SUB #12 <- #16DO ,1 SUB #13 <- #162PLEASE READ OUT ,1PLEASE GIVE UP

stručně řečeno, INTERCAL je velmi propracovaný vtip. Druh vtipu, který vás může vést k obdivování jeho tvůrce pro jeho vytrvalost nebo k pochybnostem o jeho zdravém rozumu, nebo možná obojí.

JSFuck

úspěch Interpretace jsou podnítil vznik mnoha derivátů jazyků, příliš mnoho zmínit všechny. Ale nejpozoruhodnější je JSFuck.

JSFuck není správný jazyk, ale je to spíše esoterický programovací styl JavaScriptu, který vyžaduje použití pouze 6 znaků. Výsledné programy jsou platné programy JavaScript a ve skutečnosti to bylo vynalezeno obejít bezpečnostní techniky, jako je detekce malwaru. Díky svým vlastnostem byl také užitečný pro zmatení kódu.

funguje to, protože můžete vyhodnotit jakýkoli výraz v JavaScriptu jako jakýkoli typ. Takže reprezentuje a prázdné pole, ale tím, že jej předepíšete +, můžete ho vynutit, aby vyhodnotil jako číslo 0. Chcete-li získat písmeno jako a, můžete manipulovat s hodnotou false atd. Konečným výsledkem je extrémně podrobný jazyk: ekvivalent alert("Hello World!") je dlouhý 22948 znaků.

Malbolge

Malbolge je jazyk speciálně navržen tak, aby být téměř nemožné používat:

přes pult-intuitivní ‚šílené operace, základní-tři aritmetické, a self-změna kódu

podle slov jeho vlastní tvůrce.

ve skutečnosti s ním ani autor nikdy nenapsal pracovní program. První program byl vygenerován jiným programem, který implementoval heuristický vyhledávací algoritmus. Jazyk není Turing úplný a je také založen na překlepu Malebolge, osmého kruhu pekla v pekle Dante Alighieri. Takže to opravdu nemá žádnou vykupující kvalitu.

nepokusím se to popsat, protože celá věc je explicitně cvičení ve frustraci. Existuje však pozoruhodná „šílená operace“, která stojí za zmínku: šifrování. Jazyk má pracovat na ternárním virtuálním stroji a má tři registry, z nichž jeden obsahuje ukazatel na aktuální instrukci a nazývá se . Po poučení je proveden modulo 94 hodnoty v nahradí cokoliv, co je v pak výsledek je šifrována podle šifrovací tabulky. Vítejte v pekle, vskutku.

nějaká statečná duše vytvořila program Hello World.

(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc

Piet

Piet je jazyk, ve kterém jsou programy reprezentovány jako abstraktní umělecké obrazy ve stylu Pieta Mondriana. Je založen na zásobníku a Turing kompletní.

k dispozici je 18 barev seřazených podle odstínu a jasu plus černá a bílá. Tyto poslední dva mají zvláštní význam a používají se pro řízení toku. Provádění programu se opírá o dva „ukazatele“: ukazatel směru a výběr barevného bloku. DP může ukazovat nahoru, dolů, doleva a doprava, zatímco CC může ukazovat pouze doleva a doprava. Kombinace těchto dvou ukazatelů řídí provádění programu: v podstatě který blok barvy je proveden dále. Velikost bloku barvy představují celé číslo. Když program přechod mezi různými bloky barvy, jejich rozdíl v odstínu a jasu určuje druh příkazu, který je proveden. Příkazy jsou obvyklé, jako je výstup hodnoty, násobení atd.

program Hello World má určitou krásu.

Hello World v Piet Thomas Schoch

Shakespeare

Shakespeare je jazyk navržen tak, aby: „krásné zdrojový kód, který se podobal Shakespeare hraje“. Jazyk má málo příkazů a je funkčně podobný jazyku assembly, ale není překvapením, že je docela podrobný.

proměnné musí být deklarovány v počáteční části a jejich jména musí být platný Shakespearovské postavy, jako Romeo nebo Julie. Tyto proměnné jsou stohy, na kterých budou později provedeny operace jako pop, push a vstup/výstup. Název aktů a scén funguje jako Goto štítky a cíl některých podmíněných prohlášení. Znaky, tj. proměnné, musí být volána na jevišti manipulovat a tam může být jen dvě najednou na jevišti.

řádky obvykle představují Číselné konstanty: některá podstatná jména a přídavné jméno jsou převedeny v číselných hodnotách.

Hamlet: You lying stupid fatherless big smelly half-witted coward!Juliet: You are as villainous as the square root of Romeo!

speciální slova, jako „pamatovat“, nebo jejich kombinace, jako „mluvit svou mysl“, provádět příkazy. Jedná se o normální příkazy, jako je tlačení hodnot na znak zásobníku, výstup hodnoty aktuální proměnné nebo odpovídajícího znaku ASCII.

podmíněný výrok je reprezentován otázkou z jednoho znaku a odpovědí z druhého znaku, která určuje, kam jít, pokud stav otázky vyhodnotí na pravdivý.

Juliet: Am I better than you?Hamlet: If so, let us proceed to scene III.

svět Hello je stejně dlouhý a produktivní jako Shakespearova hra.

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.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! Scene II: The praising of Juliet.Hamlet: Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind! Scene III: The praising of Ophelia.Hamlet: 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! Act II: Behind Hamlet's back. Scene I: Romeo and Juliet's conversation.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! Scene II: Juliet and Ophelia's conversation.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!

Thue

Thue je programovací jazyk založený na řetězec přepisování systému, tzv. semi-Thue systému. Je nedeterministický a sleduje paradigma programování omezení. Což znamená, že proměnné jsou definovány z hlediska omezení (např. něco je pravda nebo lež). Je to Turingova plachta.

V případě Thue na costraints jsou zastoupeny seznam substituční pravidla ve formě:

<string>::=<replacement>

Speciální formáty tohoto formuláře představují vstupní, výstupní nebo konec seznamu pravidel.

nedeterministickou povahu jazyka lze ukázat označením dvou možných náhrad za stejný řetězec. Příklad:

  • napsat pravidlo, které říká, že řetězec a může být nahrazen s stupid
  • můžete také napsat pravidlo, které říká, že řetězec a může být nahrazen you are

Když program je spuštěn řetězec a by mohl být nahrazen buď ze dvou možností.

za seznamem pravidel následuje řetězec, který představuje počáteční stav.

zatímco psaní užitečného programu může být těžké, typický Hello World je poměrně snadný a srozumitelný, alespoň podle standardu esoterických programovacích jazyků.

a::=~Hello World!::=a

Unlambda

Unlambda je (téměř) čistě funkcionální jazyk navržen tak, aby ukázat čistě funkcionální jazyk (a pravděpodobně, jak nepraktické to by bylo). Je založen na kombinační logice. Je to Turing kompletní a první funkční Turing plachta. Opírá se o několik funkcí, operátor apply ` (znak backquote) a podporuje také vstup/výstup. Technicky funguje pouze na funkcích s jediným argumentem, ale funkce s více argumenty mohou být přeloženy do posloupnosti funkcí.

program Hello World vypadá téměř čitelně.

`r```````````.H.e.l.l.o. .w.o.r.l.di

další zajímavé esoterické jazyky

Fuga je jazyk, který používá MIDI soubory jako zdrojový kód. Intervaly mezi každou notou jsou přeloženy do konkrétních tradičních příkazů, jako je vstup/výstup nebo přidání.

Beatnik je jazyk založený na zásobníku, který se skládá z řady anglických slov; mezery a interpunkce jsou ignorovány. Slova jsou převedena v tradičních příkazech podle jejich hodnoty ve hře Scrabble.

Whitespace je jazyk vtipu, ve kterém jsou platné pouze znaky mezer, jako jsou karty a mezery, a jakýkoli jiný znak je ignorován. To je, samozřejmě, inverzní k obvyklému chování kompilátorů, které ignorují mezery. Vzhledem k těmto charakteristikám může být použit v programu Polyglot, to znamená v programu, který je platný pro více než jeden jazyk. Tak dlouho, jak druhý jazyk není Python, nebo jakýkoli jazyk, kde mezery záleží.

GolfScript je konkatenativní programovací jazyk určený k vítězství v kódových golfových soutěžích, který je také Turing kompletní.

Snowflake je reverzibilní samoomodifikující jazyk, ve kterém se při každém běhu mění jak interpret, tak program.

FRACTRAN je jazyk, ve kterém jsou programy seznamem zlomků a počátečním číslem. Nejsem si jistý, co to dělá, ale něco dělá, protože má stránku na Wikipedii.

Iota a Jot jsou dva formální jazyky, z nichž každý je navržen jako nejjednodušší formální systém. Svou povahou mohou být také považovány za stejně minimalistické, Turing tarpit, programovací jazyky. Oba používají pouze dva symboly a provádějí dvě operace. Nástupce, nazvaný Zot, podporuje také vstup/výstup.

entropie je velmi výstižně pojmenovaný programovací jazyk navržený tak, aby přijal myšlenku vzdát se kontroly. Jakýkoli výstup programu bude aproximován a při každém přístupu k datům je náhodně upraven. Jazyk nemění původní program, takže při každém spuštění se výstup bude lišit, ale počáteční stav bude zachován. Zvědavým vedlejším účinkem randomizace dat je opilá Eliza, webová verze klasického programu Eliza, ve kterém se terapeut zdá být opilý.

Monicelli je vtipný jazyk založený na komediálním filmu moji přátelé. Typický program vypadá jako řada nesmyslných italských frází. Překvapivě to dává smysl, protože film použitý jako inspirace obsahuje také nesmyslné fráze. Je to kruh šílenství.

shrnutí

svět esoterického programovacího jazyka je stejně vzrušující jako šílený: neexistují žádná pravidla, ale spousta zajímavých věcí. Doufám, že jsem vám dal trochu rozumné okno o tom, co byste mohli očekávat.

pokud se chcete dozvědět více nebo se účastnit této komunity, doporučuji podívat se na Esolangy. Tato webová stránka, spolu s Wikipedií, je zdrojem většiny příkladů uvedených v tomto článku. Tam také najdete inspiraci v seznamu nápadů pro esoterický programovací jazyk.

můžete také najít zajímavý blog Marca C. Chu-Carrolla v jeho mnoha inkarnacích v průběhu let. Jak naznačuje název Dobrá Matematika, špatná Matematika, věnuje se hlavně matematice. Nicméně má také mnoho analýz esoterických programovacích jazyků v řadě nazvané patologické programování (jazyk). Můžete vidět například jeden věnovaný nejmenšímu programovacímu jazyku.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

Previous post domácí sušená citrusová kola
Next post Krev a čokoláda (2007)