FORTH für non-FORTHer

⇐ DEVELOPMENT-INDEX
Dieser Essay soll für nicht-FORTH-er einen Überblick über die zu
erwartenden Dinge in der Softwareentwicklung mit FORTH geben,
ohne dass zuvor tief in die Materie eingedrungen werden muss.
Dies soll als Entscheidungshilfe dienen ob und in welcher Form
FORTH einen Platz finden kann.

  * FORTH ist interaktiv (Shell), Compiler, Debugger (Editor)
  * FORTH ist klein (~1000 Zeilen Code)
  * FORTH kann einfach in bestehende Apps integriert werden
  * FORTH ist stackorientiert zu programmieren

FORTH als Gesamtsystem ist wirklich winzig und daher sehr
einfach zu überschauen, wenn man die (wenigen) Prinzipien
verstanden hat. Mit 1000 Zeilen Code erhält man bereits ein
relativ komplettes System mit Kommandozeilen Interpreter,
Compiler, Debugger, Editor etc. Diese Dinge bleiben auch zur
Laufzeit in der Produktion enthalten.
In einem so kleinen System kann man Veränderungen und
Erweiterungen sehr leicht implementieren und stehen in
kurzer Zeit zur Verfügung (Minuten oder Stunden).

FORTH lässt sich mit wenig Aufwand in jede beliebige Anwendung
einbinden. Das kann nützlich sein um z.B. innerhalb der laufenden
Anwendung unterschiedliche Kommandos ausführen zu können
(Kommandozeilen Interpreter). Hiermit kann man testen, debuggen
aber natürlich auch entwickeln, ohne die Anwendung beenden
zu müssen.  Die Programmiersprache (kann auch Assembler sein)
spielt hierbei keine Rolle.

Der Grund weswegen FORTH so kompakt gehalten werden kann
liegt im stackorientiertem Konzept. Anstelle von lokalen Variablen
und benannten Übergabeparameter hat man direkten Zugriff
auf den Parameter- bzw. Datenstack. Alle Funktionen operieren
mit dem TopOfStack bzw. NextOfStack und legen das Ergebnis
(oder die Ergebnisse) wieder auf dem Stack ab. Damit ergibt
sich ein Datenstack Fluss. Eine solche Programmierung ist zu
unterscheiden von der z.B. C++ oder Java Programmierung.
Hier entstehen auch die Probleme für nicht FORTHer. Programmierer
die Stackorientierung nicht gewohnt sind versuchen ihre ihnen bekannten
Konzepte anzuwenden, was nur widerwillig funktioniert.
Stackprogrammierung zu üben ist daher ein Schlüsselkonzept.
Ein Beispiel über die durch die Anhaftung bekannter Programmiertechniken
entstandenen Probleme ist exemplarisch an folgendem Beispiel
zu sehen: "My history with Forth & stack machines" von Yossi Kreinin
https://yosefk.com/blog/my-history-with-forth-stack-machines.html.

Ein weiteres wichtiges Konzept für die Einfachheit und Mächtigkeit
von FORTH ist die Typlosigkeit. Es findet weder eine statische noch
eine dynamische Typprüfung statt. Wenn man zu einer Fließkommazahl
die Startadresse eines Strings addieren will, wird FORTH das machen.
FORTH legt keine Hindernisse dieser Art in den Weg. Aus der Erfahrung
mit FORTH Programmen spielt die Abwesenheit von Typprüfung keine
nennenswerte Rolle. Diese Art Fehler sind selten und werden rasch erkannt.
Auf der anderen Seite ist sowohl die Typlosigkeit als auch die Einfachheit
ein mächtiges Konzept.

Wegen der interaktiven Natur und der Einfachheit von FORTH ist das
Entwickeln von Anwendungen sehr effektiv und schnell. Man kann ein
eigenes FORTH in wenigen Tagen entwickeln, oder ein freies bzw.
kommerzielles FORTH System verwenden. Die kommerziellen FORTH
Systeme bieten meist sehr gut optimierende native Code Compiler an,
allerdings auf Kosten der Einfachheit.

Das war natürlich nicht alles. Multitasking, Multiuser, FORTH auf der GPU,
FORTH im Cluster etc. sind alles natürliche und einfache Erweiterungen
für FORTH. Wobei die interaktive Natur niemals verloren geht.

Typische Anwendungsgebiete für FORTH sind in sehr kleinen Systemen
mit nur wenigen k Speicher und 8 Bit Prozessoren (embedded).
FORTH ist aber auch für große Systeme mit mehreren GB an Speicher und
64 Bit Multicore-Prozessoren sehr gut geeignet. FORTH ist ein System
das erst mit der Aufgabe wächst, und damit präzise auf die Anforderungen
zugeschnitten wird.


06.01.2018 Andreas Klimas