[go: nahoru, domu]

Přeskočit na obsah

Malbolge: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
Oprava chyby
MatSuBot (diskuse | příspěvky)
m zkopírování neúplných referencí ze zdroje překladu
 
(Není zobrazeno 40 mezilehlých verzí od 19 dalších uživatelů.)
Řádek 1: Řádek 1:
{{upravit|jazyk, dopřeložit}}
'''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, Malebolge.
'''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|samomodifikujícímu se kódu]]. Navazuje na obtížnost časnějších, náročných esoterických jazyků (jako je [[Brainfuck]] a [[Befunge]]), ale bere tento aspekt do extrému, pohrávajíc si se spletitou minulosti [[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.
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 lidskou bytostí, 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}}</ref>
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 lze 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 Iizawana v roce 2005.<ref>{{Citace elektronické monografie|url=http://www.99-bottles-of-beer.net/language-malbolge-995.html}}</ref> Hisashi Iizawa také navrhl průvodce pro programování 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.<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 světe! ===
=== Ahoj světe! ===
Tento program zobrazuje "[[Hello world|Hello World!]]", obě slova začínají velkým písmen a věta končí vykřičníkem.
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.
(aBA@?>=<;:9876543210/.-,JH)('&%$#"!~}|{zy\J6utsrq
(=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>{{Citace elektronické monografie|url=http://www2.latech.edu/~acm/helloworld/malbolge.html}}</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.
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 "akumulátor", který se používá pro Standardní I/O. '''''c''''' je ukazatel kódu, je to zvláštní [[čítač instrukcí]].<ref>{{Citace elektronické monografie|url=http://www.lscheffer.com/malbolge_spec.html}}</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.
'''''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 56: Řá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" style="margin: auto auto 298px;"
{| class="wikitable"
|+Instrukce
|+Instukce
! Hodnota
! Hodnota
([c]&#x20;+&#x20;c)&#x20;%&#x20;94
([c] + c) % 94
! Instrukce
! Instrukce
! Vysvětlení
! Vysvětlení
|-
|-
! 4
! 4
| jmp&#x20;[d]
| jmp [q]
| style="text-align:left;" | Hodnota '''[d]''' přeskočí a spustí provádění pokynů.
| style="text-align:left;" | Hodnota '''[q]''' přeskočí a spustí provádění pokynů.
|-
|-
! 5
! 5
Řádek 76: Řádek 65:
|-
|-
! 39
! 39
| rotr&#x20;[d]
| rotr [s]
mov&#x20;a,&#x20;[d]
mov a, [s]
| style="text-align:left;" | Otáčí hodnotu '''[d]''' (000211111'''2''' se stává '''2'''000211111). Výsledek uloží jak na '''[d]''' tak na '''a'''.
| 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&#x20;d,&#x20;[d]
| mov d, [c]
| style="text-align:left;" | Zkopíruje hodnotu '''[d]''' na '''d'''.
| style="text-align:left;" | Zkopíruje hodnotu '''[d]''' na '''c.'''
|-
|-
! 62
! 62
| crz&#x20;[d],&#x20;a
| crz [d], a
mov&#x20;a,&#x20;[d]
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 102: Řádek 91:


=== ''Šílený'' provoz ===
=== ''Šílený'' provoz ===
U každé trojice číslic z obou vstupů použijte následující tabulku, aby jste dostali trojici číslic výsledku. Například '''crz&#x20;0001112220,&#x20;0120120120''' dává 1001022211.
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" style="margin: auto auto 10px;"
{| 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 139: Řá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" style="margin: auto auto 10px;"
{| class="wikitable"
|+ Šifrování tabulky
|+ Šifrování tabulky
! Hodnota
! Hodnota
Řádek 360: Řádek 349:
|}
|}


== Reference ==
== 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%

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.

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á.

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.

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

[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.

Šílený provoz[6][7]
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].
Š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

Externí odkazy

[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Malbolge na anglické Wikipedii.

  1. Archivovaná kopie [online]. [cit. 2017-01-09]. Dostupné v archivu pořízeném dne 2017-07-02. 
  2. Programming in Malbolge.
  3. Language Malbolge [online]. 99 Bottles of Beer [cit. 2012-11-06]. Dostupné online. 
  4. GREEN, Austin. Malbolge [online]. [cit. 2015-06-21]. Dostupné online. 
  5. OLMSTEAD, Ben. Malbolge Specification [online]. 1998 [cit. 2015-06-21]. Dostupné online. 
  6. TEMKIN, Daniel. Interview with Ben Olmstead [online]. 3 November 2014 [cit. 2015-06-21]. Dostupné v archivu pořízeném dne 2016-10-18. 
  7. 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)