Shakespeare (Programmiersprache)

Shakespeare (Programmiersprache)

Die Shakespeare Programming Language (SPL) ist eine von Kalle Hasselström und Jon Åslund im Jahre 2001 entwickelte imperative esoterische Programmiersprache (Computersprache), welche in C realisiert wurde und zu den interessantesten, aber auch am schwersten erlernbaren Programmiersprachen gehört. Ähnlich wie bei der Programmiersprache Chef sieht eine SPL-Programm wie etwas ganz anderes aus: Ein SPL-Programm sieht auf den ersten Blick aus, als wäre es ein Drama von William Shakespeare und folgt dessen typischem Aufbau.

SPL demonstriert deutlich, dass ein funktionsfähiges Programmiersprachenkonzept nicht konventionellen Vorstellungen folgen muss. Struktur sowie Schlüsselwörter müssen prinzipiell nur einem festen Schema entsprechen, um eine eindeutige Interpretation zu erlauben, unabhängig davon, wie lesbar oder logisch der Programmtext einem Menschen erscheint. Umgekehrt sind SPL-Programme auch für Menschen, die nicht programmieren können, sehr einfach zu lesen, und zwar als Drama. Die Bedeutung für den (nichteingeweihten) Menschen und für den Computer gehen hier komplett auseinander, zwei Bedeutungen überlagern sich. Daher wird SPL gerne in der Lehre als Beispiel für Sprachdesign verwendet. [1][2]

Auf welche Weise sich die beiden Bedeutungen überlagern, welche Elemente aus den Dramen Shakespeares welchen Elementen einer Programmiersprache entsprechen, wird im Folgenden dargestellt.

Inhaltsverzeichnis

Basiswissen

Shakespeare Programming Language ist so besonders, da sie nicht wie sämtliche andere Programmiersprachen aus arithmetischen und festgelegten Zeichen basiert, sondern dem Entwickler bei seinem Programm sehr viel Freiheit lässt. Oft hat der Entwickler die Möglichkeit, das Programm an vielen Stellen in hunderte andere Varianten umzuschreiben, die zum selben Ergebnis führen.
Darüber hinaus ist die Programmiersprache an Shakespeare orientiert (man kann sozusagen in Dramenform programmieren), was sie zugleich einzigartig, aber auch gewöhnungsbedürftig macht.

Die folgenden Beispiele sind aus dem ersten Programm in SPL - dem (in der Informatik so oft programmierten) Hello World-Programm.

Funktionsweise

Der Titel

Die erste Zeile eines jeden "Dramenstücks" in SPL ist der Titel. Dieser kann frei gewählt werden und verleiht dem Stück etwas mehr Ordnung und Übersicht. Da er frei gewählt werden kann, erkennt der Compiler ihn bloß als Kommentar und lässt ihn beim Kompilieren aus. Demzufolge ist der Titel optional, die Entwickler geben jedoch zu bedenken, dass ein Programm ohne Titel so schlecht programmiert wie ein Drama ohne Titel schlecht geschrieben sei.

Beispiel:

The Infamous Hello World Program

Die Charaktere (Dramatis Personæ)

Wie in jedem Shakespeare-Drama auch, müssen am Anfang zunächst die Personen festgelegt werden. Diese sind die ersten, die vom Compiler erkannt werden und erkannt werden müssen, damit die Kompilierung zustande kommt. Aufgelistet werden alle Charaktere des Stücks, welchen stets eine kurze Beschreibung folgt.

Beispiel:

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

Die Charaktere sind vergleichbar mit (signed Integer-)Variablen. Die folgende Beschreibung des Charakters ist verpflichtend, wird jedoch vom Parser ignoriert (Quelle: Offizielle Dokumentation). Verwendet werden können nur Charaktere, welche auch in Shakespeare-Dramen eine Rolle spielen, also zumeist Romeo, Juliet, Hamlet, Othello, Macbeth, King Lear usw.

Akte und Szenen

Nach der "Deklaration" und "Initialisierung" der Variablen folgen der Abfolge eines Dramas entsprechend "Act I" und "Scene I", welche jeweils mit Titel versehen sind. Wie bereits beim Titel werden diese vom Compiler nicht gewertet; "Act" und "Scene" sind somit Schlüsselwörter für Kommentare.
Ebenfalls mit dem Titel vergleichbar sind Akte und Szenen zur erfolgreichen Kompilierung nicht zwingend. Sie sind jedoch nicht optional im Sinne des Programmierers, da jeder Programmierer in SPL quasi dazu verpflichtet ist, sein Programm in Akte und Szenen einzuteilen - vergleichbar mit Programmierkonventionen (Einrücken) in gewöhnlichen Sprachen.

Beispiel:

Act I: Hamlet's insults and flattery.
Scene I: The insulting of Romeo.

Enter, Exit und Exeunt

Jede Szene in jedem Akt wird eingeschlossen von Schlüsselwörtern, welche die Szene eröffnen bzw. schließen. Diese heißen wie im richtigen Drama zu Beginn [Enter], [Exit] und [Exeunt]. Um einen Charakter sprechen zu lassen und dafür zu sorgen, dass das Programm etwas ausführt, müssen die Charaktere der Logik zufolge auf der Bühne stehen. Charaktere, welche bereits auf der Bühne stehende Charaktere mit "you", "thou" oder einem jeden anderen Pronomen der zweiten Person ansprechen, müssen ebenfalls auf der Bühne platziert sein. Auf die Bühne kommen Charaktere durch die Festlegung ihrer im [Enter]-Befehl als eine Art "Parameter".

Beispiel:

[Enter Hamlet and Romeo]

Entsprechend treten sie auch wieder ab. Dies geschieht entweder mit dem [Exit]- oder dem [Exeunt]-Befehl. Tritt eine Figur ab, muss diese hinter dem [Exit] erwähnt werden, z. B. [Exit Romeo]. Treten zwei oder mehr Charaktere gleichzeitig ab, muss der Exeunt-Befehl verwendet werden.
Sonderfall: Am Ende der Szene treten häufig alle dargestellten Personen ab. In diesem Falle genügt ein einziges [Exeunt] ohne sämtliche Parameter, um dem Compiler dies mitzuteilen.
Gibt man einem Charakter, der bereits auf der Bühne ist, einen Enter-Befehl oder einem abwesenden Charakter ein Exit, so wird der Compiler einen Laufzeitfehler melden.

Beispiel:

[Exeunt]
[Exeunt Hamlet and Romeo]

Der Dialog

Wie im wirklichen Drama ist auch in SPL der Dialog zumeist Grundlage von Berechnung, In- und Output und Gotos. Ein Dialogteil eines einzelnen Charakters besteht aus einem Charakternamen, einem Doppelpunkt sowie einem oder mehreren Sätzen, mit dessen Hilfe z. B. eine Berechnung stattfindet.

Beispiel:

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

Konstanten

Konstanten sind in SPL ebenfalls sehr frei festgelegt. Jede Zahl und alle Berechnungen werden in englischer Sprache festgeschrieben, nicht in arithmetischen Ausdrücken. So gibt es für Konstanten einige Regeln:

  • Jedes Nomen ist grundsätzlich eine Konstante mit dem Wert 1 oder -1.
  • Dies hängt davon ab, ob das Nomen "gut" oder "schlecht" ist.
  • "flower" ist z. B. eine Konstante mit dem Wert 1; "pig" oder "negation" hätte entsprechend -1.
  • Im Zweifel sind Nomen sozusagen neutral (Wert 1), z. B. "tree" ist neutral und hat ebenfalls den Wert 1.
  • Jedes vorangeschaltete Adjektiv multipliziert das Nomen mit 2. Um einen Nomenwert also mit 4 zu multiplizieren, schaltet man zwei Adjektive vor das Nomen.
  • Im weiteren Verlauf kann man durch ausgeschriebene arithmetische Ausdrücke mit den Zahlen rechnen, z. B. "the sum of a tree and a glittering flower is ..." würde dann dem Ausdruck 1 + 2 = ... entsprechen.

Ein weiteres, komplizierteres Beispiel:

"the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece"

Zunächst ersetzt man die Konstanten durch Zahlen. Der Satz verändert sich somit in:

"the difference between the square of the difference between 2 and 4 and the cube of -4"

Nun ist die Differenz zwischen 2 und 4 eben (-2) und die dritte Potenz von (-4) ist (-4)^3 = -64. Da das Quadrat von (-2) = 4 ist, kommt man unter dem Strich zu "the difference between -4 and -64", was genau 60 entspricht.

So ist "the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece" = 60.

Quellen

  1. University of Notre Dame: Kurs AME 437: Control Systems Engineering Homework 3 (englisch) "For any two of the four differential equations you solved last week in 2.9.5, also verify your answer by plotting your solution and a solution obtained by numerically solving the equation using a fourth order Runge Kutta routine written in C, C++, FORTRAN or the Shakespeare Programming Language."
  2. West Virginia University: Kurs English 306: Topics in Humanities Computing (englisch) "Sept 16 Meadows, Pause and Effect, Chap 2
    McCloud, "Time Frames" NMR
    Recommended: Shakespeare Programming Language, Scott McLoud, Cloudmakers, Liquid Stage, Jimmy Corrigan, Crutch, Devil's Tramping Ground, Memex Engine, Ambient Machines, demain/When I am King"

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Shakespeare (Begriffsklärung) — Shakespeare ist der Familienname folgender Personen: Nicholas Shakespeare (* 1957), britischer Journalist und Schriftsteller Robert Shakespeare (* 1953), jamaikanischer Musiker William Shakespeare (1564–1616), englischer Dramatiker William… …   Deutsch Wikipedia

  • Shakespeare Programming Language — Die Shakespeare Programming Language (SPL) ist eine von Kalle Hasselström und Jon Åslund im Jahre 2001 entwickelte imperative esoterische Programmiersprache (Computersprache), welche in C realisiert wurde und zu den am schwersten erlernbaren… …   Deutsch Wikipedia

  • Esoterische Programmiersprache — Esoterische Programmiersprachen sind Programmiersprachen, die nicht für den praktischen Einsatz entwickelt wurden, sondern ungewöhnliche Sprachkonzepte umsetzen. Eine einfache Bedienung ist selten, teilweise werden Sprachen konzipiert, um… …   Deutsch Wikipedia

  • Puck (Programmiersprache) — Puck Visuelle Programmiersprache Basisdaten Paradigmen: Visuelle Programmierumgebung …   Deutsch Wikipedia

  • Chef (Programmiersprache) — Chef (engl. für Koch oder Chefkoch) ist eine von David Morgan Mar entwickelte esoterische Programmiersprache. Sie beruht auf der Modifizierung von Daten auf einigen Stacks. Das Konzept ähnelt dem der Programmiersprache „Shakespeare“. Jedes… …   Deutsch Wikipedia

  • Liste der Programmiersprachen — A A (Programmiersprache) A# A+ A 0 A 1 A 2 A 3 A9 AACC AADL AAIMS aal AAPL Aardappel AARDVARK Abacus ABACUS 10 ABACUS/X ABAP ActionScript Ada ADbasic AgentSpeak(L) Agilent VEE AHDL Aleph ALGOL (ALGOL 60, ALGOL W, ALGOL 68) Amber …   Deutsch Wikipedia

  • Weird Programming — Esoterische Programmiersprachen sind Programmiersprachen, die nicht für den praktischen Einsatz entwickelt wurden, sondern ungewöhnliche Sprachkonzepte umsetzen. Eine einfache Bedienung ist selten, teilweise werden Sprachen konzipiert, um… …   Deutsch Wikipedia

  • Infinite Monkey Theorem — Durch zufälliges Tippen von unendlicher Dauer auf einer Schreibmaschine werden mit Sicherheit alle Texte Shakespeares oder diverser Nationalbibliotheken entstehen. Das Infinite Monkey Theorem (v. engl. infinite „unendlich“; monkey „Affe“; theorem …   Deutsch Wikipedia

  • Infinite monkey theorem — Durch zufälliges Tippen von unendlicher Dauer auf einer Schreibmaschine werden mit Sicherheit alle Texte Shakespeares oder diverser Nationalbibliotheken entstehen. Das Infinite Monkey Theorem (v. engl. infinite „unendlich“; monkey „Affe“; theorem …   Deutsch Wikipedia

  • Satz vom Affen — Durch zufälliges Tippen von unendlicher Dauer auf einer Schreibmaschine werden mit Sicherheit alle Texte Shakespeares oder diverser Nationalbibliotheken entstehen. Das Infinite Monkey Theorem (v. engl. infinite „unendlich“; monkey „Affe“; theorem …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”