Esoteric Programming, Teil 1

Was sind esoterische Programmiersprachen?

| Autor / Redakteur: Mirco Lang / Stephan Augsten

Ein simples Schachprogramm – mit nicht allzu selbsterklärendem Befunge-Code.
Ein simples Schachprogramm – mit nicht allzu selbsterklärendem Befunge-Code. (Bild: Mirco Lang)

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

Esoterische Programmiersprachen sind nicht für den produktiven Einsatz gedacht, vielmehr geht es darum, ungewöhnliche Sprachkonzepte umzusetzen. Ausgangspunkt könnte beispielsweise der Anspruch sein, einen möglichst kleinen Interpreter zu haben. In anderen Fällen war den Entwicklern eher daran gelegen, massiv zu vereinfachen – oder auch zu verkomplizieren: Es gibt Sprachen, neben denen C-Quellcode die Komplexität von „Alle meine Entchen“ ausstrahlt.

Und ein nicht unerheblicher Teil der esoterischen Programmiersprachen dient schlicht dem Amüsement von Nerds und Programmierern – und das seit immerhin 45 Jahren. Aber bevor der Verdacht aufkommt, hier würde es sich nur um einen Haufen Unsinn handeln: Viele solcher Sprachen sind Turing-vollständig, verdeutlichen Konzepte „echter“ Programmiersprachen und werden an Universitäten rund um den Globus behandelt.

Diese kleine Serie wird in fünf Folgen die spannendsten und absurdesten esoterischen Programmiersprachen vorstellen – und beim praktischen Einstieg helfen, sofern es tatsächlich lauffähige Interpreter gibt. Zu Beginn soll aber erst einmal ein kurzer Blick in die Geschichte zeigen, was es mit dem Thema überhaupt auf sich hat. Und warum „You lying stupid Idiot!“ tatsächlich einer Variablen einen Wert zuweist, muss natürlich auch noch aufgelöst werden.

Die Anfänge: INTERCAL

Die meisten Sprachen dürften aus der Zeit zwischen den späten 1980ern und Anfang des Jahrtausends stammen, den Ursprung legten aber Don Woods und Jim Lyon vor 45 Jahren im Mai 1972 an der renommierten Princeton University.

Gamern dürfte Don Woods durchaus bekannt sein: 1976 schrieb er Erweiterungen für das Text-basierte Abenteuer „Adventure“ und gilt als einer der Urväter des Adventure-Genres und dessen starken Fantasy-Bezugs. Die erste Implementierung setzte noch auf Lochkarten, 1990 folgte eine UNIX-Umsetzung von einem weiteren Bekannten: Eric S. Raymond, Mitgründer und -vordenker der Open Source Initiative (OSI).

Zitat: „Den meisten Spaß bringt INTERCAL beim Herausfinden, wie es für etwas genutzt werden könnte, das in anderen Sprachen trivial ist.“
Zitat: „Den meisten Spaß bringt INTERCAL beim Herausfinden, wie es für etwas genutzt werden könnte, das in anderen Sprachen trivial ist.“ (Bild: Don Woods/Ben Collins-Sussman - flickr.com / CC BY 2.0)

INTERCAL verdeutlicht schon im Namen, wie Nerds dieses Schlags – damals wie heute – ticken: „Compiler Language With No Pronouncable Acronym“ (Compiler-Sprache ohne aussprechbare Abkürzung). Und selbst diese obskure Auflösung dreht noch eine Extrarunde: Zunächst gab es den Namen INTERCAL – laut Woods einfach deshalb, weil es gut und irgendwie nach „Interblah Calculation“ klang. Erst später sollte der Name als Akronym genutzt werden – und dass es das Gegenteil des ursprünglichen Gedankens wurde, ist typisch für die Szene. Das rekursive Akronym „GNUs not Unix“ kennt vielleicht der ein oder andere.

Und was wollte INTERCAL? Zeitgenössische Programmiersprachen veralbern! Die Sprache sollte möglichst kompliziert und ihr Quellcode kaum lesbar sein – offenbar wurde Quellcode schon damals als ästhetisch eher mäßig gelungen empfunden. Auch wenn Woods und Lyon keine bestimmten Sprachen im Sinn hatten, lassen sich vor allem FORTRAN- und COBOL-DNA erkennen.

Selbst die Handbücher waren Spoofs – ein kleines Beispiel: Das INTERCAL-Handbuch hat am Ende eine „Mandel“ mit Befehlsreferenzen und so weiter. Eine Mandel? Tja, alle anderen Manuals hatten einen Appendix. Da sich dieses Wort nicht nur als „Anhang“ sondern auch als „Wurmfortsatz“ interpretieren lässt, sollte INTERCAL einen „anderen Typ von entfernbarem Organ“ bekommen. Das Handbuch allein ersetzt schon einige Stunden Stand-up-Comedy.

Hello World in INTERCAL

Was unterscheidet nun also esoterischen von ernsthaftem Code? Das obligatorische „Hello World“-Programm dürfte einiges klarstellen:

DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP

Meckert jetzt noch jemand über C-Code? Immerhin handelt es sich um ein höfliche Sprache – aber bitte nicht zu höflich sein. Verwendet der Programmierer zu selten PLEASE, meckert das Programm. Genau genommen müssen es vier oder fünf sein – egal wo. In der ersten Zeile entsteht das 13-Zeichen-Array für „Hello, World!“, anschließend werden die Buchstaben den einzelnen Positionen zugewiesen und letztlich ausgegeben.

In den folgenden Teilen der Esoterik-Serie werden Sprachen ausführlich vorgestellt, hier gibt es aber erst einmal einen kurzen Überblick der kommenden Highlights.

Komprimierte Esoterik: HQ9+

HQ9+ ist im Grunde die Essenz esoterischer Programmiersprachen – und tendenziell in einer Minute erlernbar. Erfinder ist Cliff L. Biffle, Mitarbeiter bei Alphabets Forschungsabteilung X (früher Google X). Er beschäftigte sich um die Jahrtausendwende mit esoterischen Programmiersprachen und bemerkte, dass im Wesentlichen die immer gleichen drei Beispiele als Demonstration dienen mussten:

  • Ein Hello-World-Programm,
  • dessen Erweiterung, nämlich ein „99-Bottles“-Programm, das den gesamten Text des bekannten Lieds „99 Bottles of Beer on the Wall“ wiedergibt sowie
  • ein Quine, also ein Programm, das den eigenen Quellcode ausgibt.

HQ9+ kann genau diese drei Dinge: „Hallo Welt“ (H), den Song-Text (9) und den Quellcode (Q) ausgeben – auf Wunsch mehrmals (+). Alle Operatoren finden sich also bereits im Namen – und hier der wohl kürzeste Quellcode für ein „Hallo Welt“-Programm:

H

Zum Ausprobieren gibt es einen simplen Online-Interpreter für HQ9+.

Esoterische Highlights

In der Welt der Programmier-Esoterik gibt es viel zu entdecken: Der wohl bekannteste Auswuchs esoterischer Sprachen ist Brainfuck – der Name ist Programm, der Anwender soll es schwer haben! Und das funktioniert, obwohl gerade mal acht Befehle in der Turing-vollständigen Sprache von Urban Müller stecken. Die Abwandlung Brainfuck2D nimmt eine zweite Dimension auf und erstellt wirklich „hübschen“ Code:

Ein echter Gaumenschmaus ist Chef – hier kann man die Programme sogar essen! Chef-Code liest sich wie ein Rezept aus einem Kochbuch und Programmierer wären nicht die kreativen und verqueren Köpfe, die wir mögen, gäbe es nicht Quelltexte, die sowohl zu einem funktionierenden Programm als auch zu einem leckeren Kuchen führen würden.

Autor David Morgan-Mar, bekannt für seine Web-Comics, überzeugt aber auch mit Programmiersprachen für Orang Utans (Ook!) und Untote (Zombie).

Whitespace ist die Sprache für notorische Quelltext-Ausdrucker. Da nur Whitespace-Kombinationen gültigen Code erstellen, wird wirklich enorm wenig Tinte verbraucht – allerdings könnte das Lesen recht problematisch werden.

Und dürstet es Eurer Erhabenheit nach mehr, so haltet kurz inne und labet euch an der Shakespeare Programming Language. Hier gilt es noch die Frage zu klären, warum „You lying stupid Idiot!“ einer Variablen einen Wert zuweist: Das Personalpronomen „You“ spricht eine Variable an, die Adjektive „lying“ und „stupid“ stehen jeweils für den Wert 2 und das negativ besetzte Nomen „Idiot“ steht für -1 – alle Werte werden multipliziert und schon ist klar, dass einer Variablen der Wert -4 zugewiesen wird. Alles klar? Keine Sorge, der SPL-Artikel wird etwas mehr Licht ins Dunkel bringen.

Und zu guter Letzt gibt es auch Projekte mit Reminiszenzen an aktuellere Persönlichkeiten: TrumpScript hat durchaus Ähnlichkeiten mit dem Namensgeber.

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: 44742023 / IDEs & Programmiersprachen)