Malbolge: Porovnání verzí
m oprava syntaxe; kosmetické úpravy |
m zkopírování neúplných referencí ze zdroje překladu |
||
(Není zobrazeno 43 mezilehlých verzí od 21 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
{{upravit|jazyk, dopřeložit}} |
|||
{{Přeložit|20170109144103}} |
|||
'''Malbolge''' je [[Volné dílo|volný]] [[ezoterický programovací jazyk]], který vytvořil Ben Olmstead v roce 1998 a byl pojmenován po osmém kruhu pekla v dramatu [[Dante Alighieri]]ho, |
'''Malbolge''' je [[Volné dílo|volný]] [[ezoterický programovací jazyk]], který vytvořil Ben Olmstead v roce 1998 a byl pojmenován po osmém kruhu pekla v dramatu [[Dante Alighieri]]ho, Malbolge. |
||
Malbolge byl navržen tak, aby bylo téměř nemožné ho používat kvůli neintuitivním „šíleným operacím“ a [[Samomodifikující se kód| |
Malbolge byl navržen tak, aby bylo téměř nemožné ho používat kvůli neintuitivním „šíleným operacím“ a [[Samomodifikující se kód|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í [[Dějiny informatiky|počítačové vědy]] a šifrování. Navzdory tomuto [[Návrhový vzor|návrhu]] je možné (i když velmi náročné) psát užitečné Malbolge programy. |
||
== Programování v Malbolge == |
== 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 |
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é prohledávání|paprskovým prohledávacím]] algoritmem, navrženým Andrewem Cookem a uplatňovaným v [[Lisp]]u.<ref>{{Citace elektronické monografie|url=http://acooke.org/malbolge.html|titul=Archivovaná kopie|datum přístupu=2017-01-09|url archivu=https://web.archive.org/web/20170702192612/http://acooke.org/malbolge.html|datum archivace=2017-07-02|nedostupné=ano}}</ref> |
||
Později, Lou Scheffer zaslal [[Kryptoanalýza|dešifrování]] k Malbolge a poskytl program pro kopírování jeho vstupu na jeho výstup.<ref>[http://www.lscheffer.com/malbolge.shtml Programming in Malbolge]. </ref> 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. |
Později, Lou Scheffer zaslal [[Kryptoanalýza|dešifrování]] k Malbolge a poskytl program pro kopírování jeho vstupu na jeho výstup.<ref>[http://www.lscheffer.com/malbolge.shtml Programming in Malbolge]. </ref> 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 |
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.<ref>{{cite web|url=http://www.99-bottles-of-beer.net/language-malbolge-995.html |title=Language Malbolge |publisher=99 Bottles of Beer |date= |accessdate=2012-11-06}}</ref> Hisashi Lizawa také navrhl průvodce pro programování v Malbolge. |
||
== Příklad Programu == |
== Příklad Programu == |
||
=== Ahoj |
=== Ahoj světe! === |
||
Tento program zobrazuje |
Tento program zobrazuje „[[Hello world|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 |
(=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc. |
||
=== CAT Program === |
=== CAT Program === |
||
Tento program čte řetězec od uživatele a vypíše tento řetězec. |
Tento program čte řetězec od uživatele a vypíše tento řetězec. |
||
( |
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/. |
||
~P<8 |
|||
ponmlkjihgJ%dcba`_^]\[ZYXWVUTSRQPONMLKJIHGF('C%$$^ |
|||
<:(8& |
|||
K~<;4987654321a/.-,\*) |
|||
66#"!~}|{zyxwvu |
|||
j |
|||
gJ% |
|||
!~%|{zya}|{zyxwvutsrqSonmlO |
|||
jLhg'edcba`_^]\[ZYXWV8TSRQ4 |
|||
OBZVLÁŠTĚ,/KJIBGFE>CBA@?>=<;{9876w |
|||
43210/.-m+*)('&%$#"!~}|{zy\ |
|||
wvunslqponmlkjihgfedcEa`_^O |
|||
\>ZYXWPUTSRQPONMLKJIH*FEDC& |
|||
A@?>=<;:9876543210/.-m+*)(já |
|||
&%$#"!~}|{zyxwvutsrqpRnmlkN |
|||
ihgfedcba`_^]\[ZYXWVU7SRQP3 |
|||
NMLKJIHGFEDCBA@?>=<;:z8765v |
|||
3210/.-,+*)('&%$#"!~}_{zyx[ |
|||
vutsrqjonmlejihgfedcba`_^]@ |
|||
[ZYXWVUTSRo |
|||
== Design == |
== Design == |
||
Malbolge je [[Strojový kód|programovací jazyk]] pro [[Trojková soustava|ternární]] [[virtuální stroj]]. |
Malbolge je [[Strojový kód|programovací jazyk]] pro [[Trojková soustava|ternární]] [[virtuální stroj]]. |
||
Standardní interpretace a oficiální specifikace neodpovídají dokonale.<ref>{{ |
Standardní interpretace a oficiální specifikace neodpovídají dokonale.<ref>{{Cite web|title = Malbolge|url = http://www2.latech.edu/~acm/helloworld/malbolge.html|website = www2.latech.edu|accessdate = 2015-06-21|last = Green|first = Austin}}</ref> 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 === |
=== Registry === |
||
Malbolge má tři [[Registr procesoru|registry]] '''''a''''', '''''c''''' a '''''d'''''. Když program začíná, hodnota všech tří registrů je nulová. |
Malbolge má tři [[Registr procesoru|registry]] '''''a''''', '''''c''''' a '''''d'''''. Když program začíná, hodnota všech tří registrů je nulová. |
||
'''''a''''' je zkratka pro |
'''''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í]].<ref>{{Cite web|title = Malbolge Specification|url = http://www.lscheffer.com/malbolge_spec.html|website = www.lscheffer.com|accessdate = 2015-06-21|last = Olmstead|first = Ben|date = 1998}}</ref> '''''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 === |
=== Ukazatel notace === |
||
Řádek 57: | Řádek 45: | ||
=== 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: |
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: |
||
{| class="wikitable |
{| class="wikitable" |
||
|+Instrukce |
|||
|+Instukce |
|||
! Hodnota |
! Hodnota |
||
([c] |
([c] + c) % 94 |
||
! Instrukce |
! Instrukce |
||
! Vysvětlení |
! Vysvětlení |
||
|- |
|- |
||
! 4 |
! 4 |
||
| jmp |
| jmp [q] |
||
| style="text-align:left;" | Hodnota '''[ |
| style="text-align:left;" | Hodnota '''[q]''' přeskočí a spustí provádění pokynů. |
||
|- |
|- |
||
! 5 |
! 5 |
||
Řádek 77: | Řádek 65: | ||
|- |
|- |
||
! 39 |
! 39 |
||
| rotr |
| rotr [s] |
||
mov |
mov a, [s] |
||
| style="text-align:left;" | Otáčí hodnotu '''[d]''' ( |
| style="text-align:left;" | Otáčí hodnotu '''[d]''' (0002111069 se stává '''2'''000211169). Výsledek uloží jak na '''[d]''' tak na '''a'''. |
||
|- |
|- |
||
! 40 |
! 40 |
||
| mov |
| mov d, [c] |
||
| style="text-align:left;" | Zkopíruje hodnotu '''[d]''' na ''' |
| style="text-align:left;" | Zkopíruje hodnotu '''[d]''' na '''c.''' |
||
|- |
|- |
||
! 62 |
! 62 |
||
| crz |
| crz [d], a |
||
mov |
mov a, [d] |
||
| style="text-align:left;" | Dělá ''šílený provoz'' (viz níže) s hodnotou '''[d]''' a hodnota '''a'''. Výsledek uloží jak na '''[d]''' tak na '''a'''. |
| style="text-align:left;" | Dělá ''šílený provoz'' (viz níže) s hodnotou '''[d]''' a hodnota '''a'''. Výsledek uloží jak na '''[d]''' tak na '''a'''. |
||
|- |
|- |
||
Řádek 103: | Řádek 91: | ||
=== ''Šílený'' provoz === |
=== ''Šílený'' provoz === |
||
U každé |
U každé dvojice [[Trojková soustava|ternárních]] číslic z obou vstupů provede operaci dle následující tabulky. Například '''crz 0001112220, 0120120120''' dává 1001022211. |
||
{| class="wikitable |
{| class="wikitable" |
||
|+ ''Šílený'' provoz<ref name=":0">{{Cite web|title=Interview with Ben Olmstead|url=http://esoteric.codes/post/101675489813/interview-with-ben-olmstead|website=esoteric.codes|accessdate=2015-06-21|last=Temkin|first=Daniel|date=3 November 2014}}</ref><ref name=":1">{{Cite web|title=Programming Method in Obfuscated Language Malbolge|url=http://www.sakabe.i.is.nagoya-u.ac.jp/~nishida/DB/pdf/iizawa05ss2005-22.pdf|website=www.sakabe.i.is.nagoya-u.ac.jp|accessdate=2015-06-21|last=IIZAWA|first=Hisashi|location=Graduate School of Information Science, Nagoya University Furo-cho, Chikusa-ku, Nagoya City, Aichi, 464–8603 Japan|language=Japanese}}</ref> |
|+ ''Šílený'' provoz<ref name=":0">{{Cite web|title=Interview with Ben Olmstead|url=http://esoteric.codes/post/101675489813/interview-with-ben-olmstead|website=esoteric.codes|accessdate=2015-06-21|last=Temkin|first=Daniel|date=3 November 2014|titul=Archivovaná kopie|datum přístupu=2017-01-09|url archivu=https://web.archive.org/web/20161018131540/http://esoteric.codes/post/101675489813/interview-with-ben-olmstead|datum archivace=2016-10-18|nedostupné=ano}}</ref><ref name=":1">{{Cite web|title=Programming Method in Obfuscated Language Malbolge|url=http://www.sakabe.i.is.nagoya-u.ac.jp/~nishida/DB/pdf/iizawa05ss2005-22.pdf|website=www.sakabe.i.is.nagoya-u.ac.jp|accessdate=2015-06-21|last=IIZAWA|first=Hisashi|location=Graduate School of Information Science, Nagoya University Furo-cho, Chikusa-ku, Nagoya City, Aichi, 464–8603 Japan|language=Japanese}}</ref> |
||
! colspan="2" rowspan="2" | crz |
! colspan="2" rowspan="2" | crz |
||
! colspan="3" | Vstup 2 |
! colspan="3" | Vstup 2 |
||
Řádek 140: | Řádek 128: | ||
; Metoda 2 |
; Metoda 2 |
||
: Níže najdete výsledek. Uložení šifrované verze na '''''[c]'''''. |
: Níže najdete výsledek. Uložení šifrované verze na '''''[c]'''''. |
||
{| class="wikitable |
{| class="wikitable" |
||
|+ Šifrování tabulky |
|+ Šifrování tabulky |
||
! Hodnota |
! Hodnota |
||
Řádek 361: | Řádek 349: | ||
|} |
|} |
||
== |
== Odkazy == |
||
=== Externí odkazy === |
|||
* {{Commonscat}} |
|||
=== Reference === |
|||
{{Překlad|en|Malbolge|758717056}} |
{{Překlad|en|Malbolge|758717056}} |
||
<references /> |
<references /> |
||
{{Programovací jazyky}} |
|||
{{Autoritní data}} |
|||
[[Kategorie:Programovací jazyky]] |
|||
[[Kategorie:Ezoterické programovací jazyky]] |
[[Kategorie:Ezoterické programovací jazyky]] |
Aktuální verze z 21. 6. 2024, 21:34
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
[editovat | editovat zdroj]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.[1]
Později, Lou Scheffer zaslal dešifrování k Malbolge a poskytl program pro kopírování jeho vstupu na jeho výstup.[2] 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.[3] Hisashi Lizawa také navrhl průvodce pro programování v Malbolge.
Příklad Programu
[editovat | editovat zdroj]Ahoj světe!
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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
[editovat | editovat zdroj]Malbolge je programovací jazyk pro ternární virtuální stroj.
Standardní interpretace a oficiální specifikace neodpovídají dokonale.[4] 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
[editovat | editovat zdroj]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í.[5] 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
[editovat | editovat zdroj]d může držet adresu paměti, [d] je hodnota uložená na této adrese, [c] je podobná.
Paměť
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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:
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
[editovat | editovat zdroj]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.
crz | Vstup 2 | |||
---|---|---|---|---|
0 | 1 | 2 | ||
Vstup 1 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 2 | |
2 | 2 | 2 | 1 |
Šifrování
[editovat | editovat zdroj]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].
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
[editovat | editovat zdroj]Externí odkazy
[editovat | editovat zdroj]Obrázky, zvuky či videa k tématu Malbolge na Wikimedia Commons
Reference
[editovat | editovat zdroj]V tomto článku byl použit překlad textu z článku Malbolge na anglické Wikipedii.
- ↑ Archivovaná kopie [online]. [cit. 2017-01-09]. Dostupné v archivu pořízeném dne 2017-07-02.
- ↑ Programming in Malbolge.
- ↑ Language Malbolge [online]. 99 Bottles of Beer [cit. 2012-11-06]. Dostupné online.
- ↑ GREEN, Austin. Malbolge [online]. [cit. 2015-06-21]. Dostupné online.
- ↑ OLMSTEAD, Ben. Malbolge Specification [online]. 1998 [cit. 2015-06-21]. Dostupné online.
- ↑ TEMKIN, Daniel. Interview with Ben Olmstead [online]. 3 November 2014 [cit. 2015-06-21]. Dostupné v archivu pořízeném dne 2016-10-18.
- ↑ IIZAWA, Hisashi. Programming Method in Obfuscated Language Malbolge [online]. Graduate School of Information Science, Nagoya University Furo-cho, Chikusa-ku, Nagoya City, Aichi, 464–8603 Japan: [cit. 2015-06-21]. Dostupné online. (Japanese)