náhled|Zdrojový kód programu cat v jazyce Malbolge Malbolge je volný ezoterický programovací jazyk, který vytvořil Ben Olmstead v roce 1998 a byl pojmenován po osmém kruhu pekla v dramatu Dante Alighieriho, Malbolge.

Malbolge byl navržen tak, aby bylo téměř nemožné ho používat kvůli neintuitivním „šíleným operacím“ a samo modifikujícímu se kódu. Navazuje na obtížnost časnějších, náročných ezoterických jazyků (jako je Brainfuck a Befunge), ale bere tento aspekt do extrému, pohrává si se spletitou minulostí počítačové vědy a šifrování. Navzdory tomuto návrhu je možné (i když velmi náročné) psát užitečné Malbolge programy.

Programování v Malbolge Malbolge bylo tak těžké pochopit, že trvalo dva roky než se objevil první Malbolge program. Sám autor nenapsal ani jeden program v Malbolge. První program nebyl napsán člověkem, byl vytvořen paprskovým prohledávacím algoritmem, navrženým Andrewem Cookem a uplatňovaným v Lispu.

Později, Lou Scheffer zaslal dešifrování k Malbolge a poskytl program pro kopírování jeho vstupu na jeho výstup.Programming in Malbolge. Také vložil interpretaci a specifikaci poté, co původní stránky přestaly fungovat a nabídl obecnou strategii pro psaní programů v Malbolge.

Olmstead věřil, že Malbolge bude lineárně ohraničený Turingův stroj. Diskutuje o tom, zda je možné realizovat smysluplné smyčky v Malbolge. Program 99 Lahví Piva, který se zabývá netriviálními smyčkami a podmínkami, nebyl oznámen po dobu sedmi let; první správný byl od Hisashiho Lizawana v roce 2005. Hisashi Lizawa také navrhl průvodce pro programování v Malbolge.

Příklad Programu

Ahoj světe! Tento program zobrazuje „Hello World!“, obě slova začínají velkým písmenem a věta končí vykřičníkem. (=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc.

CAT Program Tento program čte řetězec od uživatele a vypíše tento řetězec. (=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/. ~P<8 <:(8& 66#"!~}|{zyxwvu gJ%

Design Malbolge je programovací jazyk pro ternární virtuální stroj.

Standardní interpretace a oficiální specifikace neodpovídají dokonale. Jeden rozdíl je, že kompilátor zastaví provádění s daty v rozsahu 33–126. I když to bylo zpočátku považováno za chybu v kompilátoru. Ben Olmstead uvedl, že to bylo zamýšleno a ve skutečnosti byla chyba ve specifikaci.

Registry Malbolge má tři registry a, c a d. Když program začíná, hodnota všech tří registrů je nulová.

a je zkratka pro „akumulátor“, který se používá pro Standardní I/O. c je ukazatel kódu, je to zvláštní čítač instrukcí. d je ukazatel dat. Ten se automaticky zvýší po každé instrukci, ale umístění bodů se používá pro příkazy k manipulaci s daty.

Ukazatel notace d může držet adresu paměti, [d] je hodnota uložená na této adrese, [c] je podobná.

Paměť Virtuální stroj má 59049 (310) paměťových míst. Každé místo v paměti má adresu od 0 do 59048 a může mít hodnotu od 0 do 59048.

Jazyk používá stejný paměťový prostor pro data i instrukce.

Instrukce Malbolge má osm pokynů. Jakou instrukci provést zjistí tím, že vezme hodnotu [c], přidá k ní hodnotu c a vezme zbytek je-li to děleno 94. Konečný výsledek říká interpretovi, co má dělat: +Instrukce Hodnota ([c] + c) % 94 Instrukce Vysvětlení 4 jmp [q] Hodnota [q] přeskočí a spustí provádění pokynů. 5 out a Vytisknutím na hodnotu a se zobrazí na obrazovce, jako ASCII znak. 23 in a Vstupy mají charakter jako ASCII kód. Nový řádek má kód 10. Konečný stav souboru je kód 59048. 39 rotr [s] mov a, [s] Otáčí hodnotu [d] (0002111069 se stává 2000211169). Výsledek uloží jak na [d] tak na a. 40 mov d, [c] Zkopíruje hodnotu [d] na c. 62 crz [d], a mov a, [d] Dělá šílený provoz (viz níže) s hodnotou [d] a hodnota a. Výsledek uloží jak na [d] tak na a. 68 nop Nic nedělá. 81 end Končí Malbolge program. Jakékoli jiné hodnoty dělá to samé jako 68: nic. Tyto jiné hodnoty nejsou povoleny v programu.

Šílený provoz U každé dvojice ternárních číslic z obou vstupů provede operaci dle následující tabulky. Například crz 0001112220, 0120120120 dává 1001022211. + Šílený provoz crz Vstup 2 0 1 2 Vstup 1 0 1 0 0 1 1 0 2 2 2 2 1

Šifrování Po instrukci hodnota [c] bude nahrazena samotným kódem 94. Poté je výsledek šifrován jednou ze dvou rovnocenných metod. Metoda 1 Níže najdete výsledek. Uložení ASCII kódu na znak a poté na [c]. 0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123

9m<.TVac'uY*MK X~xDl}REokN:#?G"jsem@5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb Metoda 2 Níže najdete výsledek. Uložení šifrované verze na [c]. + Šifrování tabulky Hodnota Šífrované Hodnota Šifrované Hodnota Šifrované Hodnota Šifrované Hodnota Šifrované0 57 19 108 38 113 57 91 76 79 1 109 20 125 39 116 58 37 77 65 2 60 21 82 40 121 59 92 78 49 3 46 22 69 41 102 60 51 79 67 4 84 23 111 42 114 61 100 80 66 5 86 24 107 43 36 62 76 81 54 6 97 25 78 44 40 63 43 82 118 7 99 26 58 45 119 64 81 83 94 8 96 27 35 46 101 65 59 84 61 9 117 28 63 47 52 66 62 85 73 10 89 29 71 48 123 67 85 86 95 11 42 30 34 49 87 68 33 87 48 12 77 31 105 50 80 69 112 88 47 13 75 32 64 51 41 70 74 89 56 14 39 33 53 52 72 71 83 90 124 15 88 34 122 53 45 72 55 91 106 16 126 35 93 54 90 73 50 92 115 17 120 36 38 55 110 74 70 93 98 18 68 37 103 56 44 75 104

Odkazy

Externí odkazy

Reference

Kategorie:Programovací jazyky Kategorie:Ezoterické programovací jazyky