Forth
Forth wurde wesentlich von ChuckMoore entwickelt und folgt dem Prinzip KeepItSimpleSmall.
Forth zeichnet sich deswegen durch Kompaktheit, hohe Portabilität und PostfixNotation aus und ist besonders für Microcontroller geeignet. Durch seine einfache Struktur war es möglich kostengünstige Forth-prozessoren (Stack-CPUs) zu bauen. Infos sh. Literatur (unten).
Forth ist mit Lisp (LispLanguage) und Postscript (PostScript) verwandt, aber dennoch ganz anders.
Forth wird sowohl interpretiert als auch compiliert, hier ein Beispiel für die Berechnung der Primzahlen mit dem Sieb Eratosthenes.
Auch wenn : angeblich in den "compiler mode" schaltet, was hat das eigentlich mit einem Compiler zu tun? Sieht für mich aus wie ein ordinärer Interpreter, so wie in PerlLanguage etwa.
Hier die Antwort (http://www.forth-ev.de/forth.html): Forth arbeitet immer in einem von zwei Modi; Interpretation oder Compilation. Ein Textinterpreter verarbeitet den Eingabestrom, der von Tastatur oder einem Massenspeicher kommt, und zerlegt ihn in eine Folge von durch Leerzeichen getrennte Zeichenketten. Diese Zeichenketten werden im Wörterbuch gesucht und im Interpretermodus wird ihr zugehöriger Code aufgerufen. Zahleneingaben werden entsprechend konvertiert und auf dem Stack abgelegt. Der : (Colon) ist ein Forth-Wort wie alle anderen; er legt jedoch einen neuen Wörterbucheintrag mit dem Namen des neuen Wortes an und schaltet den Compilermodus ein. Nun werden für die meisten Worte aus dem Eingabestrom entsprechende Aufrufe in das neu angelegte Wort kompiliert. Demzufolge besteht ein kompiliertes Forth-Wort aus einer Folge von Aufrufen anderer Wörter, die dann entsprechend abgearbeitet werden. Einige Worte mit einem speziellen Immediate-Flag werden im Compilermodus nicht kompiliert sondern statt dessen ausgeführt. Diese Immediate-Worte sind Compiler-Hilfsworte, die dem Aufbau spezieller Sprachkonstrukte dienen. Ein IF kompiliert z. B. eine entsprechende Sprungstruktur in das neue Wort. Das abschließende THEN (in älteren Dialekten manchmal ENDIF) kann dann auf eine korrekte Verschachtelung prüfen und Sprungziele auflösen. Ein weiteres Immediate-Wort ist das ; welches die Definition beendet und das System zurück in den Interpretermodus versetzt. Da der Programmierer selbst Immediate-Worte schreiben kann, hat er damit die Möglichkeit auch den Compiler selbst zu erweitern. Eine weitere Besonderheit sind Definitionsworte, die zur Erzeugung von Datenstrukturen verwendet werden. Sie kombinieren eine CREATE-Teil, in dem alle Aktionen beschrieben werden, die zum Anlegen der neuen Datenstruktur erforderlich sind (Reservierung von Speicher, Initialisierung, ...) mit einem DOES>-Teil, in dem das Laufzeitverhalten der aller mit diesem Wort erzeugten Datenstrukturen beschrieben werden kann.
(http://www.tinyboot.com/forth.html)
Beispiele
100 constant upperbound create sieve upperbound 1 + cells allot : clearsieve upperbound 0 do true sieve i cells + ! loop ; : fillsieve dup 2 * upperbound swap do false sieve i cells + ! dup +loop drop ; : showprimes cr upperbound 2 do sieve i cells + @ if i . cr then loop ; : calcprimes clearsieve upperbound 2 / 2 do sieve i cells + @ if i fillsieve then loop ; : primes clearsieve calcprimes showprimes ; primes
Der : leitet ein neues Wort ein bis zum nächsten ;
Wenn man schnell die Antwort auf die Frage nach dem Leben, dem Universum und den ganzen Rest berechnen will:
7 6 * .
;-)
Muß das nicht 7 9 * . heißen?
Forth-Projekte
Retro - BetriebsSystem, geschrieben in Forth http://retro.tunes.org/ und zugehöriges Wiki http://retro.tunes.org/wiki
Tiara - Bios-Replacement zum Booten von Linux http://sourceforge.net/projects/utcboot/
ColorForth von ChuckMoore http://www.colorforth.com/cf.html (folgt streng dem KeepItSimpleSmall Prinzip, ist zugleich Forth-Compiler und Betriebssystem. Wurde in Hinblick auf minimalen Ressourcenverbrauch und effiziente Nutzung entworfen. So unterstützt es aus Prinzip nur DvorakTastatur als Keyboardbelegung.
Forth-Compiler
4TH http://www.xs4all.nl/~thebeez/4tH/foldtree.html (sehr guter, effizienter 32-bit Forth-Compiler, in C-Programme einbettbar, mein Favorit)
BigForth http://bigforth.sourceforge.net/ (32-bit Forth-Compiler, mit mächtigen Bibliotheken, inkl. Grafik, voll Standard konform)
Forthish http://pigseye.kennesaw.edu/~rbentley/ (ganz einfacher Forth-Interpreter)
GForth http://www.jwdt.com/~paysan/gforth.html (Implementation des GnuProjekts, Standard konform)
IsForth http://isforth.clss.net/ Forth für x86. The authors opinion (from README): "Any Forth that is not able to compile its own sources is not in my opinion worth using", "In order to build the IsForth kernel you will need the GNU make utility and the ever so slightly buggy NASM assembler" and "The kernels for each processor (of planned versions) shall be written from scratch"
lpForth http://www.forthfreak.net/wiki/index.cgi?lpForth lpForth is a free meta compiling Forth for Linux
PFE http://pfe.sourceforge.net/ Portable Forth Environment (sehr portable Forth-Implementierung, Standard konform, Ziele sind: korrektheit, Einfachheit, Portierbarkeit, Sicherheit)
Standard
FORTH-Standard ftp://ftp.uu.net/vendor/minerva/x3j14/j14-94.htm
Literatur
FORTH Interest Group http://www.forth.org/
FORTH Inc. http://www.forth.com
Thinking in Postscript, enthält trotz des Titel vieles, das auf Forth zutrifft.
Forth wikis
FORTH e.V. http://forth-ev.de (deutschsprachig)
FORTH-Wiki http://www.forth-ev.de/wiki/html/Forth/FrontPage.htm sh. auch PostScript
Forth Wiki http://www.forthfreak.net/wiki
