hitforum.deErfahrungsaustausch für IT-Professionals

Rückblick: Esoterische Programmiersprachen

Mittwoch, den 28. November 2007 - 19:00 (Uni Duisburg)

Beim letzten HIT-Termin in diesem Jahr beschäftigten wir uns im November mit "esoterisch / exotischen Programmiersprachen" (Brainfuck und Konsorten). .

Quelltext, der aussieht, als wäre eine Katze über die Tastatur gelaufen; Programme, die aussehen wie Bilder, oder gar unsichtbarer Code - nicht wenige Programmierer finden in der Beschäftigung mit "Esoterischen Programmiersprachen" oder "Obfuscated Programming" einen zugleich intellektuell anspruchsvollen wie höchst unterhaltsamen Zeitvertreib.

Unser Referent Thomas Schoch hat uns in zwei interessanten Stunden die Faszination dieser skurrilen Welt vermittelt. Anhand von ausführlich erklärten Beispielen wurden ausgewählte Esoterische Programmiersprachen und typische Techniken des "Obfuscated Programming" vorgestellt.

Wie immer bei seinen Vorträgen hat Thomas auch diesmal sein didaktisches Geschick bewiesen. Selbst auf den ersten (und zweiten, dritten, ...) Blick völlig unverständliche Programmtexte ("sieht aus wie ein Plattencrash oder so") hat er uns verständlich erläutert. Dabei kam u.a. ein in "Powerpoint" programmierter Single-Step-Monitor zum Einsatz :-) !

Auch die folgende rätselhafte Grafik stellt beispielsweise ein Programm dar.

raetselhafte-grafik.gif, 21 kB

Und zwar in der grafischen Programmiersprache piet. Hier läuft der Programmzeiger durch die Grafik, Wechsel von Farbton und Helligkeit stellen Anweisungen dar und wie man leicht erkennt, gibt die dargestellte Grafik die Zeichenfolge "hitforum" aus!

Weitere Sprachen die wir kennen lernen durften waren brainfuck, dessen vollständiger Sprachumfang aus folgenden Zeichen besteht: [<+-.,>]. Man kann sich vorstellen, wie da die Programme aussehen. Und trotzdem ist das eine turing-vollständige Sprache. < und > bewegen einen Zeiger über ein (unendliches) Band von Speicherzellen mit Zahlenwerten (initial alle Null), + und - inkrementieren und dekrementieren deren Inhalt, Komma und Punkt dienen der Ein- und Ausgabe und mit dem Pärchen [ und ] kann man Bedingungen programmieren. Damit ist alle vorhanden, was man braucht :-) .

Thomas hatte bei seiner letzten Recherche aktuell 372 esoterische Programmiersprachen gezählt. Leider konnten wir uns derer nicht aller annehmen.

Aber befunge haben wir uns angeschaut. Diese Sprache gibt es mittlerweile in verschiedenen Dialekten. Hier bewegt der Programmzeiger sich über ein rechteckiges Feld von Speicherstellen, gesteuert von Anweisungen wie ^v<>, der Code ist also nicht linear, sondern zweidimensional! Entsprechend gibt es dann auch das "horizontale IF" (gehe abhängig vom logischen Wert nach links oder rechts) und alternativ das "vertikale IF" (_ und |).

Nicht zu vergessen, der Klassiker der (wenn man es drauf anlegt) unverständlichen Sprachen: PERL.

Typische Herausforderungen für die Fangemeinde sind Programmieraufgaben wie ein Programm, dass möglichst unverständlich ist, ein Programm das exakt seinen eigenen Quelltext ausgibt (quine), die Ausgabe des offenbar beliebten Gedichts 99 bottles of beer on the wall oder die Ausgabe des Textes "Just another Perl Hacker" (JAPH).

Ein Ziel ist häufig auch, all dieses mit einem möglichst kurzen Programm zu erreichen. So liess dann auch die spezielle Sprache HQ9+ nicht lange auf sich warten. Der Name listet auch schon den kompletten Sprachumfang auf, H gibt den Satz "Just another Perl Hacker" aus, Q den eigenen Programmtext, 9 ein beliebtes Gedicht über 99 Bierflaschen und (ACHTUNG!) + erhöht den Wert des Akkumulators. Okay, leider gibt es kein Pendant, mit dem man den Wert wieder dekrementieren kann. Das ist aber auch egal, weil es natürlich auch kein Kommando für die Ausgabe dieses Werte gibt!

Und damit das dann nicht langweilig wird, kann man noch den Anspruch an sich stellen, dass das Programm eine bestimmte grafische Form hat oder ähnliches mehr!

Und wer sich sagt, ich bin kein Typ für nur eine Sprache, kann sich an polyglotten Programmen versuchen. Hier gilt es, Programme zu erstellen, die in mehreren (zwei, drei, ... neun!) Programmiersprachen dieselbe Ausgabe erzeugen!

Ach ja, nicht zu vergessen whitespace, die Programmiersprache, deren Programme nur aus nicht-druckbaren Zeichen (Tab, Blank, Linefeed) besteht. Thomas nannte sie zu recht "tonerschonend".

Hier ein einfaches Beispiel:







Last not least seien noch Bourne-Shell, C-Shell, Korn-Shell und BASH erwähnt, mit denen man auch recht "obfuscated" programmieren kann, wenn man es drauf anlegt. Wir durften etliche Beipiele kennenlernen, die den Text hitforum ausgaben ... und erst wusste niemand, wieso!

Wenn jemand sein Gehirn trainieren möchte, Kreuzworträtsel aber eher langweilig findet, bietet eventuell die Welt der esoterischen Programmiersprachen und des obfuscated programmings die passende Herausforderung. Aber Vorsicht, Suchtgefahr! Zumindest ist es ein zeitintensives Hobby!

Um so mehr gilt unser Dank unserem Referenten Thomas Schoch für den Vortrag und die Ausarbeitung der wunderbaren Beispiele!

Hier gibt es eine kleine Linksammlung zum Thema. Auch die Vortrags-Folien gibt es demnächst hier zum Download, allerdings nur für unsere Teilnehmer (oder auf Anfrage beim Referenten).

Wie üblich haben wir unseren Referenten eingeladen und den Abend beim Italiener in gemütlicher Runde ausklingen lassen.


Wenn Sie zukünftig Informationen über unsere Veranstaltungen per E-Mail zugeschickt bekommen möchten, dann können Sie Ihre E-Mail-Adresse ganz einfach selber in unsere Newsletter-Aboliste eintragen:
 
Anmeldung für den HIT-Newsletter

BUCHTIPPS
Rezensionen unserer Leser