Esoterisches Hacken
Was sich hier findet entspringt der wunderbaren Welt der esoterischen Programmierung, wer damit nichts anfangen kann findet hier einen kleinen Einstieg. Natürlich steht aller Code auf dieser Seite, der von mir stammt unter der GPLArgh!
Argh! ist mein erster Versuch eine Sprache zu entwerfen, die den Geist esoterischer Programmiersprachen in sich trägt.Argh! bietet alles was man von einer ordendlichen Sprache erwartet und noch mehr:
- zweidimmensionalen Programmfluss (ähnlich befunge)
- einen kombinierten code/daten Raum
- einen Stack
- flowcontrol Instruktionen, die an vi angelehnt sind
- alles Instruktionen sind Buchstaben (keine cryptischen Sonderzeichen)
- ein Source-File ist maximal 80x40 Zeichen groß, oder bei Aargh! (dem Extended Argh!) 80 Zeichen breit aber beliebig lang.
- keine überflüssige Arithmetik, Addition und Substraktion genügen (wer BF kennt weiß das)
- keine cryptischen Fehlermeldungen, die standard Fehlermeldung von Argh! passt immer und lautet: "Argh!"
- es wurde noch viel mehr wegelassen, was klassische Hochsprachen unnötig aufbläht
lllllllj lllj j 2 2 kD2lgj lelSHSph 1 j lDj k LSdSh1DRxXqlFk llDkDie vollständige Spezifikation von Argh! und Aargh! kann man hier nachlesen (englisch).
Try it now!
Hier kann Aargh! mit einem in Javascript geschriebenen Interpreter direkt im Browser ausprobiert werden.Der Quellcode ist unter http://hg.intevation.org/argh/js/ zu finden.
Tutorial
In meinem blog habe ich einer Reihe Argh! Tutorials (in Englisch) veröffentlicht.Download
argh-0.2.3.tgzDas Archiv enthält einen Argh! und einen Aargh! Interpreter (in C), die Sprach-Spezifikation, einen Argh! Mode für GNU Emacs, einige Beispiel Programme sowie zusätzliche Beispiele und Tools die andere Autoren zu Argh! beigesteuert haben.
Der Argh! Mode für Emacs enthält einen vollständigen Aargh! Interpreter/Debugger, mit dem Argh! code interaktiv ausgeführt und die Arbeit des Argh!-Interpreters visualisiert werden kann.
Das öffentliche Mercurial Argh! Repository ist unter http://hg.intevation.org/argh/ zu finden.
Über Kommentare, Bugreports und natürlich Argh!-Programme jeder Art würde ich mich sehr freuen.
Laurent Vogel hat einen Argh! debugger in Perl geschrieben: argh.pl
Simeon Visser arbeitet an einen Argh! Interpreter in Haskell: arghwxhaskell
BrainFuck
BF von Urban Müller ist wohl eine der bekanntesten und beliebtesten esoterischen Programmiersprechen. Gute Infos zu BF finden sich z.B. hier.yabfi2
Yet Another BrainFuck Interpreter 2 ist ein von mir geschriebener BF Interpreter, der im Gegensatz zu den meisten anderen BF-Interpretern on-the-fly einige Optimierungen durchführt. Das macht ihn für einen Interpreter relativ flott. Der Quellcode: yabfi2.c steht natürlich unter der GPL.Die besten Ergebnisse erziehlt man mit reinem, unformatierten BF code, den man leicht mit folgendem Einzeiler erzeugen kann:
cat $BF-SOURCE | tr -d -c '[],.<>+-' > $STRIPED-BF-SOURCE
yabfi2 benutzt genauso wie sein Vorgänger mmap(2) und ist deshalb nicht sonderlich Portabel, sollte aber auf den meisten modernen Un*x-Systemen Problemlos laufen. yabfi2 wurde von mir bislang erfolgreich unter GNU/Linux, Irix 6.5, HP-UX 10.20 und Mac OS X 10.2 compiliert und getestet.
bff von Alex Pankratov verfolgt die selbe Idee, yabfi2 war als ich es schrieb bei meinen Tests geringfügig schneller, mittlerweile ist aber bff ca. doppelt so schnell. Wo bff nicht läuft (ich hatte schwierigkeiten unter Mac OS X) könnte yabfi2 aber noch eine Alternative sein...
Interessanter BF code, weitere Interpreter und Compiler u.f.m. findet sich im BrainFuck Archiv für Benchmarks habe ich unter anderem mandelbrot.b verwendet.