Wat is Malbolge en hoe werkt deze functie?

Hoe is Malbolge ontstaan?

Malbolge is een esoterische programmeertaal die in 1998 is ontwikkeld door Ben Olmstead. De naam komt van de achtste cirkel van de hel uit Dante’s Divina Commedia. Het bijzondere van Malbolge is dat het is ontwikkeld als de slechtst mogelijke programmeertaal, de meest moeilijke om te beheersen. Het eerste Malbolge-programma werd twee jaar na de creatie van de programmeertaal gemaakt. Dit programma werd echter niet door een mens geprogrammeerd, maar werd berekend door een programma dat een zoekalgoritme gebruikte. De redenen voor de moeilijkheid zijn:

  • commando’s worden na hun uitvoering vervangen door andere commando’s. Dit maakt het erg moeilijk om lussen (herhalingen in een programma) om te zetten in Malbolge.
  • het manipuleren van gegevenswoorden is alleen mogelijk in het ternaire talstelsel door middel van rechtse verschuiving en een andere zeer ongebruikelijke operator – de crazy functie.
  • de codering van een commando door een ASCII-teken hangt af van de positie van het commando modulo 94.
  • Geheugencellen kunnen alleen worden toegewezen met één van de acht mogelijke ASCII-waarden.

Wat is Malbolge?

Een Malbolge-programma bestaat uit de ASCII-tekens

+b(29e*j1VMEKLyC})8&m#~W>qxdRp0wkrUo[D7,XTcA\”lI.v%{gJh4G-=O@5`_3i<?Z’;FNQuY]szf$!BS/|t:Pn6^Ha

of in een genormaliseerde vorm uit de tekens ijopv*/<

Een Malbolge-programma wordt uitgevoerd in een geheugen van 3^10 cellen. Elke geheugencel bevat een waarde tussen 0 en 59048. Voor de uitvoering zijn drie registers nodig: C is de instructieaanwijzer die wijst naar de huidige instructie die moet worden uitgevoerd. Het register wordt automatisch verhoogd na elke instructie. D is de gegevensaanwijzer die wijst naar de huidige waarde die moet worden verwerkt. Het register wordt automatisch verhoogd na elk commando. A is het register dat wordt gebruikt voor gegevensinvoer en -uitvoer.

Programma-uitvoering

Het laden van het programma

Bij het laden van het programma worden spaties, tabbladen en regeleinden genegeerd. Bij het schrijven naar de geheugencellen wordt gecontroleerd of het een geldig commando is. Zo niet, dan wordt de uitvoering afgebroken. Als het geheugenbereik wordt overschreden tijdens het schrijven, wordt de uitvoering van het programma afgebroken. Na het lezen van het programma wordt het resterende geheugen gevuld met de Crazy-functie.

De registers initialiseren

Registers C, D en A worden op 0 gezet.

Het programma uitvoeren

  • Lees de geheugencel C
  • Controleer op geldigheid
  • Voer het commando uit
  • Versleutel de geheugencel C
  • Verhoog C en D

Commando’s

Genormaliseerdwaarde van ([c] + c) % 94CommandoOmschrijving
i4jump [D]Kopieert de waarde bij C naar [D].
5out ADrukt de waarde van A af als een ASCII-teken op het scherm.
/23in AVoert een teken in, als een ASCII-code, in A.
*40rot [D]
mov A, [D]
Roteert de waarde bij [D] met één tertiair cijfer. Slaat het resultaat zowel op bij [D] als in A.
j68mov D, [D]Kopieert de waarde bij [D] naar D.
p39D = crazy A, [D]
mov A, [D]
Voert de crazy-bewerking uit met de waarde bij [D] en de waarde van A. Slaat het resultaat zowel op bij [D] als in A.
o62nopDoet niets
v81haltBeëindigt het Malbolge-programma
Overzicht van Malbolge commando’s in GC Wizard

Lees meer over Malbolge (en):

De functie Malbolge

Bovenaan het scherm staat een schuifknop waarmee je kunt kiezen tussen de Vertaler en de Generator.

Vertaler

Als je ‘vertaler’ kiest verschijnen er een schuifknop en twee tekstvelden.

Omdat op internet Malbolge-generators zijn die niet helemaal aan de regels voldoen, kun je met de schuifknop “Strikt” kiezen of het programma precies volgens de regels van de taal moet worden uitgevoerd, of niet.

In het tekstveld daaronder plaats je het programma of de broncode.

Als er in de broncode om een Invoer wordt gevraagd kun je dit invoeren in het tekstveld Invoer.

GC Wizard zal na uitvoer van het script het resultaat tonen als tekst onder Uitvoer.

In het Uitvoer gedeelte verschijnt ook een schuifknop Debuggen. Als je deze knop activeert, verschijnt de stapsgewijze uitvoer van het programma.

Schermafdruk malbolge vertaler in GC Wizard

Generator

Als je ‘generator’ kiest verschijnt er een tekstveld waar je de tekst invoert, die je als resultaat wilt hebben na uitvoer van het script.

Onder Uitvoer zal vervolgens het programma verschijnen als de broncode en een genormaliseerde versie. Beide versies zijn uitvoerbaar.

Schermafdruk malbolge generator in GC Wizard