www.wikidata.de-de.nina.az
Malbolge ist eine gemeinfreie esoterische Programmiersprache die 1998 von Ben Olmstead entwickelt wurde Sie wurde nach dem achten Kreis der Holle aus Dantes Divina Commedia benannt Die Besonderheit von Malbolge besteht darin dass sie als schlimmstmogliche Programmiersprache entwickelt wurde die am schwierigsten zu beherrschen ist Allerdings ist Malbolge aufgrund des begrenzten Speichers nur mit leicht abgewandelten Verarbeitungsregeln Turing vollstandig Inhaltsverzeichnis 1 Allgemeines 2 Grundlegende Funktionsweise von Malbolge 2 1 Initialisierung 2 2 Zeigernotation 2 3 Befehlssatz 2 4 Crazy Funktion 2 5 Verschlusselung 3 Hello world 4 Weitere Programme in Malbolge 5 Popularkultur 6 Einzelnachweise 7 WeblinksAllgemeines BearbeitenAls Beweis fur die schwierige Entwicklung von Programmen steht dass das erste Malbolge Programm erst zwei Jahre nach dem Entstehen der Programmiersprache entstanden ist Dieses Programm wurde nicht von einem Menschen programmiert sondern von einem in Lisp geschriebenen Programm unter Anwendung eines Such Algorithmus gefunden Entwickelt wurde dieses Suchprogramm von Andrew Cooke Es gibt mehrere Grunde dafur dass Malbolge so schwierig ist Der wichtigste ist dass Befehle nach ihrer Ausfuhrung durch andere Befehle ersetzt werden Dadurch ist es sehr aufwandig Schleifen in Malbolge umzusetzen Weitere Faktoren die das Programmieren in Malbolge erschweren sind unter anderem die Tatsache dass die Manipulation von Datenworten nur im ternaren Zahlensystem mittels Rechtsshifts und eines sehr ungewohnlichen Operators moglich ist Hinzu kommt dass die Codierung eines Befehls durch ein ASCII Zeichen von der Position des Befehls Modulo 94 abhangt und Speicherzellen nur mit einem von acht moglichen ASCII Werten initialisiert werden konnen Dennoch gelang es Lou Scheffer ein Programm zu entwickeln das seine Ein auf seine Ausgabe kopiert Sein Bericht daruber endet mit Vorschlagen wie die Sprache noch schwieriger beherrschbar zu machen ware Grundlegende Funktionsweise von Malbolge BearbeitenMalbolge besitzt die drei Register a c und d sowie einen Speicher der Grosse 3 10 displaystyle 3 10 nbsp der in jeder Zelle eine 10 stellige ternare Ganzzahl speichern kann Initialisierung Bearbeiten Der Quellcode wird zunachst gefiltert ohne Leer und Zeilenwechselzeichen in den Speicher der Grosse 3 10 displaystyle 3 10 nbsp eingelesen Der noch verfugbare freie Speicher wird anschliessend mit der Crazy Funktion kodiert m crz m 2 m 1 Zeigernotation Bearbeiten Die Register c und d enthalten Speicheradressen mit c bzw d wird der an diesen Adressen gespeicherte Wert bezeichnet Befehlssatz Bearbeiten Malbolge besitzt 8 Befehlsworte Dabei wird die aktuelle Anweisung bestimmt indem der Inhalt von c und c addiert und anschliessend modulo 94 gerechnet wird Das Ergebnis wird dann mit folgenden Werten verglichen Befehle Ergebnis aus c c 94 Bedeutung Erklarung4 jmp d Setzen des Befehlszeigers c auf d 5 out a Ausgabe des Zeichens dessen ASCII Wert in a gespeichert ist 23 in a Eingabe eines Zeichens dessen ASCII Wert in a abgelegt wird Enter wird mit 10 kodiert End of File Markierung mit 59048 39 rotr d mov a d Rechtsrotation der Zahl in d d h die letzte Stelle der Ternardarstellung wird vorn angehangt der Rest wird nach rechts verschoben Aus 0002111112 wird z B 2000211111 Das Ergebnis wird sowohl in d als auch a abgelegt 40 mov d d Kopiert den Wert von d nach d 62 crz d amov a d Wendet die crazy Funktion auf den Wert von d und a an Das Ergebnis liegt anschliessend in d und a vor 68 nop Macht nichts 81 end Beendet das Programm Jeder andere Wert verhalt sich wie 68 Nach jeder Operation wird c verschlusselt Anschliessend wird c und d um eins erhoht Crazy Funktion Bearbeiten Die zwei ubergebenen Zahlen werden ziffernweise entsprechend der Tabelle kodiert Beispielsweise wird aus crz 0001112220 0120120120 die Zahl 1001022211 Crazy Funktion crz Input 20 1 2Input 1 0 1 0 01 1 0 22 2 2 1Verschlusselung Bearbeiten Nach dem Ausfuhren der Anweisung jedoch vor der Inkrementierung von c wird c mit Hilfe einer Codetabelle permutiert Hello world BearbeitenDieses Malbolge Programm gibt Hello world aus lt 9876Z4321UT Q M amp H Bzy z KwZY44Eq0 mlk hKs dG5 m BA Y Vb rR5431M zHGwEDCBA 98 6543W10 R O lt Weitere Programme in Malbolge BearbeitenEs ist mittlerweile kein Problem mehr Programme in Malbolge zu schreiben die lediglich einen festen String begrenzter Lange ausgeben Die Lange des Strings ist begrenzt weil Malbolgeprogramme nicht mehr als 59049 Befehle enthalten konnen Neben dem bereits oben erwahnten cat Programm von Lou Scheffer welches einen Bug im Interpreter ausnutzt der es ermoglicht Speicherzellen mit Nicht ASCII Zeichen zu initialisieren gibt es bisher Stand Dezember 2012 nur sehr wenige Programme in Malbolge die Schleifen enthalten Eines davon ist ein weiteres cat Programm das jedoch auch ohne Ausnutzung des Interpreter Bugs funktioniert Zu den eindrucksvollsten Programmen in Malbolge durfte ein 2005 erschienenes Programm gehoren das die Lyrics des Liedes 99 Bottles of Beer ausgibt und dafur nichttriviale Schleifen und bedingte Verzweigungen benutzt Der Code dieses Programms ist fur einen Menschen nicht lesbar Ein weiteres Programm in Malbolge das mit nichttrivialen Schleifen und bedingten Verzweigungen arbeitet ist ein Ende 2012 erschienenes Quine Popularkultur BearbeitenIn der zehnten Episode der Fernsehserie Elementary Leviathan heisst es ein Ermittlungshinweis sei in Malbolge verfasst 1 In der zwolften Episode der Fernsehserie Leverage Redemption The Golf Club wird behauptet die Hackerin Breanna konne erst wieder auf ihre Nachrichten antworten wenn sie Malbolge gemeistert hatte 2 Einzelnachweise Bearbeiten Episode Leviathan Elementary Episode 10 Staffel 1 CBS 14 Dezember 2012 Episode The Golf Job Leverage Redemption Staffel 1 Episode 12 IMDb TV 8 Oktober 2021 Weblinks BearbeitenLou Scheffers Hack Andrew Cookes Erklarungen zum Lisp Suchprogramm Interpreter C Quellcode Hisashi Iizawa 99 Bottles of Beer Matthias Ernsts Quine Malbolge auf esolangs org Abgerufen von https de wikipedia org w index php title Malbolge amp oldid 240919819