Eine meiner Hackerregeln bis jetzt war, so oft wie moeglich was
umzustellen, damit es einem bloss nicht zu ungemuetlich wird. Zum
Beispiel das Betriebssystem, oder die Programmiersprache. Der
Hintergedanke dabei: keine Aenderungen, und schon klopft der
Mainstream an der Tuer, und bald hat man sich auf irgendwas
festgesetzt, und ist nicht besser als die Java-Drones oder die
Linux-Juenger da draussen. Die letzte grosse Aenderung ist bei mir
jetzt echt einiges her (der Umstieg auf LISP als
Hauptprogrammiersprache vor ein bisschen mehr als einem Jahr), und
soeben hoerte ich die Langeweile an der Tuer klopfen, um mich
abzuholen. Es musste (oder muss) also unbedingt was her. Zum Glueck
stiess ich ueber irgend ein Blog auf die PDF Version von Thinking
Forth von Leo Brodie.
Forth war schon frueher mal kurz auf meinem Radar aufgetaucht
(schliesslich konnte man damit recht bequem die Suns im
Informatik-Poolraum 0wn3n), aber so wirklich was geworden war es
nicht. Das Konzept der Sprache ist so einfach und kristallklar:
Programme haben zwei Stacks zur Verfuegung, einer fuer Daten, einer
fuer Returnadressen. Reihenfolge von Befehlen, die diesen Stack
manipulieren, kann man unter einem Namen in einer Struktur namens
Dictionary ablegen. Und das wars so ungefaehr (wer es wirklich genau
wissen will, kann ein Blick in den Forth dpANS Standard
werfen). Klingt so ein bisschen nach Assembler fuer eine Stack
Machine, aber eigentlich ist es viel mehr, der Forth-Compiler ist
naemlich auch in Forth geschrieben, und ist interaktiv. Ohne einer
solchen Schnittstelle zum Compiler ist nach LISP die Welt ein
bisschen grau und oede. Das heisst also, das man den Compiler
weitgehend fuer seine eigenen Zwecke benutzen kann. Man kann Woerter
(sprich, Funktionen) definieren, die zur Compile-Zeit aufgerufen
werden. Oder man kann Woerter definieren, die andere Woerter
definieren und sie um bestimmten Code ergaenzen (Macros).
Das Faszinierende an dem Ganzen jedoch ist immer die geringe
Komplexitaet von dem Code. Der Compiler laesst sich in ein paar Zeilen
niederhacken, so wie eigentlich ziemlich alles in Forth. Das fuehrt
auch dazu, dass jeder Forth-Programmierer mindestens einen eigenen
Forth-Compiler geschrieben hat. Ich habe zum Hacken unter Unix gforth benutzt, das
auch ueber ein nettes Interface zu Emacs verfuegt, als Forth ist es
jedoch leicht bloatig. Es gibt ganz ganz viele Forths, die sich als
komplette Programmierumgebung verstehen, mit Editor, Debugger,
und… Betriebssystem. Besonders erwaehnenswert sind hier die
Forth-Varianten von Chuck
Moore, der Erfinder von Forth. Sein Colorforth ist ein
Betriebssystem-Forth (es gibt aber auch Linux-Ports
(X11 und OpenGL) und Windows–Ports), mit eigenem
Tastaturlayout (alles schoen minimal, nur 27 Tasten). Ein
interessantes Feature ist das Syntax weitgehend durch Farben ersetzt
wurde: da wird weniger Platz auf dem Bildschirm verbraten. Ein gute
Link-Sammlung zu Colorforth findet man auf dem Quartus Forth-Wiki. Wenn
man das Colorforth startet, ist man erst total verloren, nur so
langsam kommt man da zurecht. Doch was Chuck Moore damit macht, ist
ehrlich faszinierend. Er hat ein CAD-Programm zum Entwerfen von
VLSI-Schaltungen auf einem solchen System programmiert, und wie man an
den Filmen im Streaming Video
Theater sehen kann, scheint das extrem schnell und maechtig zu
sein (Chuck Moore meint, es waeren nur 500 Zeilen Code (!!)).
Das ganz spannende an Forth ist, dass man eine Stack-Architektur sehr
einfach in Hardware giessen kann (mittlerweile auch in VHDL
Programmieren): auf der Chip-Seite von Ultratechnology gibt es
eine ausfuehrliche Liste von Stack-Rechnern und Forth-Chips. Dort ist
auch das grossartige Buch Stack
Computers von Philip Koopman verlinkt, in dem die Architektur von
solchen Stack-Rechnern erlaeutert wird.
Jetzt aber wieder zurueck zu Thinking
Forth. Thinking Forth ist kein Forth Buch in dem eigentlichen
Sinne, sondern ein Buch ueber die “Philosophie” von Forth, und handelt
eher von Software-Technik: wie werden Probleme analysiert und in Code
umgesetzt, wie kann ich meine Software strukturieren, dass ich sie
einfach schreiben kann, und auch einfach anpassen kann, usw… Nur
sind die Ansaetze in Forth schon anders als in herkoemmlichen
Sprachen. Da es kaum Syntax gibt sind die Grenzen zwischen Funktionen,
Datenstrukturen, Kontrollstrukturen ziemlich verwischt, und es braucht
erst einiges, bis man sich da zurecht findet. Zum Glueck ist das Forth
Einfuehrungsbuch von Leo Brodie in HTML umgesetzt worden: Starting Forth (sehr
empfehlenswert). Es steht dem PUSHen und POPen jetzt nicht mehr im
Wege :}