Esoteric Programming, Teil 2

Shakespeare Programming Language

| Autor / Redakteur: Mirco Lang / Stephan Augsten

Kompilieren eines SPL-Skripts – leider hagelt es in diesem Fall Fehlermeldungen.
Kompilieren eines SPL-Skripts – leider hagelt es in diesem Fall Fehlermeldungen. (Bild: Mirco Lang)

In der Shakespeare Programming Language verfasster Quellcode hat mit den Meisterwerken des Schriftstellers wenig gemein. Die esoterische Programmiersprache reicht aber nahe an ein Theaterstück heran – zumindest, wenn man wüste Beschimpfungen mag.

Die Shakespeare Programming Language stammt von Kalle Hasselström und Jon Åslund und produziert den wohl lesenswertesten (und lesbarsten) Quellcode überhaupt. Im Februar 2001 brüteten die beiden über einigen Programmier-Aufgaben.

Je später die Nacht, umso lästiger die Aufgaben – aber es wartete noch eine Übung, die kreativen Freiraum ließ: Lexikalische und syntaktische Analyse. Und schon war die SPL geboren, mit dem simplen Design-Ziel, hübschen Quellcode zu haben, der an Shakespeare-Stücke erinnert.

Die Sprache beschränkt sich auf simple Arithmetik und GOTO-Befehle: „... wir haben die Ausdrucksfähigkeit von BASIC mit der Nutzerfreundlichkeit von Assemblersprachen kombiniert“, bemerken die Autoren. Einen Compiler gibt es für SPL leider nicht, aber immerhin einen Übersetzer nach C; eine Implementierung findet sich bei GitHub.

Beispiel-Code

Das ganze klingt zunächst reichlich kryptisch – ein wenig Quellcode muss her. Leider ist der SPL-Code bereits für das mitgelieferte Hello-World-Beispiel reichlich lang. Denn wie auch der Namensgeber, kommt SPL nicht wirklich direkt zum Punkt, der Weg ist das Entscheidende. Hier daher ein Minibeispiel, das im Wesentlichen der abgespeckte Anfang des Hello-World-Codes plus eine weitere Funktion aus anderen Beispielen:

The Useless Example Program.

Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Hamlet, the flatterer of Andersen Insulting A/S.

   Act I: Hamlet's insults and flattery.

   Scene I: The insulting of Romeo.

[Enter Hamlet and Romeo]

Hamlet:
   You lying stupid fatherless smelly coward!
   You are as stupid as the difference between a rich brave
   hero and thyself! Speak your mind!

[Exit Romeo]

   Scene II: The praising of Juliet.

[Enter Juliet]

Hamlet:
   Thou art as sweet as the sum of the sum of Romeo
   and his horse and his black cat! Speak thy mind!

   Listen to your heart!

Juliet:
   Am I better than the product of a miserable liar and a beautiful flower?

Hamlet:
   If so, let us return to szene I.

[Exeunt]

Vorab: Es hilft, schon mal ein Shakespeare-Werk oder ein anderes älteres Theaterstück in Buchform gesehen zu haben, also zum Beispiel eines der kleinen gelben Reclam-Heftchen, die zumeist noch aus der Schule bekannt sein dürften. Die ganze Struktur des Codes orientiert sich an dieser Form.

SPL-Programme beginnen mit einem Titel, der ohne weitere Funktion ist. Es folgt, wie üblich bei Theaterstücken, eine Liste der Charaktere – die bei SPL die Variablen darstellen. Möglich sind alle Personen aus Shakespeare-Stücken, gemäß einer beigelegten Wortliste. Die Beschreibung der Charaktere ist obligatorisch, wird aber vom Parser ignoriert. Es folgt eine Einteilung in Akte und Szenen, um den Code zu strukturieren.

Was sind esoterische Programmiersprachen?

Esoteric Programming, Teil 1

Was sind esoterische Programmiersprachen?

05.07.17 - „You lying stupid Idiot!“, das bedeutet in der Shakespeare Programming Language: „x = -4“. Willkommen in der Welt der esoterischen Programmiersprachen! Zwischen lehrreichen Konzeptstudien und akademischen Witzen verbirgt sich eine Wunderwelt der Horizonterweiterung. lesen

Über die Enter-Anweisung betreten zunächst Hamlet und Romeo die Bühne – sprich, diese beiden Variablen stehen zur Verfügung. Und jetzt beginnen die Beschimpfungen. In der SPL-Welt geht es im Wesentlichen darum, Zahlen zu berechnen, die dann entsprechend einer Kodierung als Buchstaben, Zahlen und Zeichen ausgegeben werden. „You lying stupid fatherless smelly coward“ demonstriert das Prozedere: „You“ spricht in diesem Fall die Variable „Romeo“ an, da Hamlet zu Romeo spricht. Negativ besetzte Nomen, hier „coward“, stehen für -1, positiv besetzte für +1 – und die Adjektive davor stehen jeweils für „* 2“. So löst sich der Satz auf in „Romeo = 2 * 2 * 2 * 2 * (-1)“.

Weiter geht es mit einer weiteren Zuweisung über die Konstruktion „as stupid as“. Angesprochen wird wieder Romeo, derzeitiger Wert: -16. Es folgt wieder eine simple Rechenoperation: „difference between a rich brave hero and thyself!“ übersetzt sich in „4 - (-16)“, da das Reflexifpronomen „thyself“ natürlich Romeos Eingangswert adressiert. Romeo hat also nun den Wert 20. Und über „Speak your mind!“ würde dieser Wert nun ausgegeben; die Alternative wäre „Open Your Heart!“.

Die zweite Szene

Romeo hat seinen Dienst geleistet und tritt ab – man kann es sich wohl denken, über das Exit-Statement. In der zweiten Szene kommt zunächst wieder Bekanntes, Hamlet konstruiert einen Wert und dieser wird ausgegeben. Neu ist das Gegenstück zu „Speak your mind!“: „Listen to your heart!“ ist die Aufforderung an Juliet, diesen Wert (23) einzulesen.

Es folgt das Äquivalent zur If-Anweisung: Wenn Juliet fragt, „Am I better than the product of a miserable liar and a beautiful flower?“, wird eben geprüft, ob „23 > (2 * -1) * (2 * 1)“. Und Hamlet erwidert: „Falls ja, lass uns zu Szene I zurückkehren.“ Ganz kurz in Pseudo-Code würden die letzten beiden Statements also für „If 23 > -4 Then Goto Scene I“ stehen. GOTO-Sprünge funktionieren nur von Szene zu Szene innerhalb des selben Akts.

Dieses Beispielprogramm wäre also eine sinnlose Endlosschleife – beendet über die Exeunt-Anweisung, die mehrere Charaktere abtreten lässt, beziehungsweise alle, wenn keine Namen aufgeführt werden.

Stacks

Im Grunde sind in dem Beispiel bereits alle Design-Element von SPL angesprochen – die Dokumentation gibt aber noch zu bedenken, dass die Charaktere keine Idioten sind, die sich nur eine einzige Zahl merken können. Zumal die Anzahl der möglichen Variablen auch noch beschränkt ist, hat jeder Charakter einen eigenen Stack, auf dem Werte abgelegt oder davon abgerufen werden können:

Die Anweisung „Hamlet: Remember me.“ würde Hamlets aktuellen Wert auf den Stack seines Gegenübers legen. Das Gegenstück „Hamlet: Recall whatever you moron.“ würde einen Wert vom Stack von Hamlets Gesprächspartner abrufen und ihm zuordnen.

Schönheit...

... liegt im Auge des Betrachters – und im Fall von SPL-Code könnte diese sogar ein Nicht-Programmierer bemerken. Die Sprache bringt einfach viele schöne Kleinigkeiten mit sich. If-Anweisungen lassen sich beispielsweise nicht nur per „let us“ auflösen, sondern auch mit „we shall“ oder „we must“ – und so bleibt dem Autor eine gehörige Portion dichterischer Freiheit.

Interessant ist auch ein Blick in den „include“-Ordner des SPL-Archivs. Hier finden sich die intensiv genutzten Wortlisten für Charaktere, negative und positive Adjektive/Nomen und so weiter. Hier ließe sich ganz einfach nach eigenen Wünschen erweitern, um als Ausdruck für „0“ neben „nothing“ und „zero“ vielleicht noch „nada“ verwenden zu dürfen.

Wer noch tiefer einsteigen will, findet im Archiv auch einige Beispielsskripte, die deutlich über „Hallo Welt“ hinausgehen; darunter das obligatorische „99 Bottles of Beer“-Lyrics-Programm, ein Tool zur Fibonacci-Folge und in „guess.spl“ wird es sogar interaktiv: Man denke sich eine Zahl zwischen 1 und 1.000, das Skript tippt eine Zahl und bekommt vom User Hinweise in der Art „kleiner“ (<) oder „größer“ (>) – solange, bis die Zahl korrekt geraten wurde und der User mit „=“ das Spiel beendet.

Die Shakespeare Programming Language ist eine wirklich außergewöhnliche Sprache. Sie eignet sich durchaus, einige Gedanken zu verdeutlichen – vor allem, dass Programmiersprachen nicht unbedingt aus kryptischen Sonderzeichen bestehen müssen. Wer sein Leben lang nur seriösen C++-Code erlebt hat, dürfte jedenfalls einen gewaltigen Blick über den Tellerrand werfen können. In diesem Sinne:

[Exeunt]

Kommentare werden geladen....

Kommentar zu diesem Artikel

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 44744461 / IDEs & Programmiersprachen)