Forth – die ewig junge Programmiersprache

Seite 2: Warum Forth?

Inhaltsverzeichnis

Fragt man Forth-Anwender nach den Vorteilen der Sprache, bekommt man unterschiedliche Antworten. Da ist einmal der geringe Speicherverbrauch eines Forth-Systems: auf Embedded-Systemen mit ARM- oder RISV-V-CPU verbraucht ein vollständiges Forth-System oft weniger als 16 KiB RAM- oder Flash-Speicher (ja, Kilobyte). Auf kleinen Systemen bleibt mehr Platz für die Anwendung. Bei der Produktion von Hardware kann das eine wichtige Kostenersparnis sein. Mit dem geringen Speicherverbrauch kommt eine hohe Energieeffizienz, wichtig für Anwendungen, die über Jahre batteriegespeist laufen müssen (z. B. Tiefseesensoren) oder nur im geringen Maße selbst Strom erzeugen können (Weltraummissionen wie der Philae Lander der Rosetta-Mission).

Intern ist Forth als Programmiersprache einfach aufgebaut – so einfach, dass Programmierer nach einigen Jahren Forth-Programmierung anfangen, ein eigenes Forth zu schreiben. Durch ihre Einfachheit ist die Sprache auf vielen Systemen (CPU-Architekturen, Mikrocontroller-Boards und Betriebssystemen) zu finden. Vermutlich keine andere Programmiersprache wurde auf so viele Rechnersysteme portiert.

Das gibt Entwicklern eine enorme Flexibilität: Die Hardware oder das Betriebssystem müssen nicht schon zu Anfang eines Projekts fest geschrieben werden, sondern lassen sich auch später noch ändern, ohne dass schon erstellter Programmcode dabei überflüssig würde. Und findet man ein Rechnersystem, auf dem es noch kein Forth gibt, dann schreibt man selbst eines (oder lässt es schreiben). Eine Portierung von Forth auf eine neue CPU-Architektur oder ein neues Mikrocontroller-Board ist in der Regel in zwei bis vier Tagen abgeschlossen. Damit wird das Forth-Projekt beliebig skalierbar, vom Mikrocontroller mit 16 KByte Flash und 0,5 KByte RAM bis zum Multi-CPU-Server oder Supercomputer lässt sich der gleiche Quellcode ausführen.

Hardwarenahe Entwickler schätzen das vorhersagbare Laufzeitverhalten von Forth. Die Sprache direkt auf Hardware (ohne Betriebssystem) ausgeführt, erlaubt harte Echtzeitprogrammierung, bei der die Ablauf- und Antwortgeschwindigkeit der Software vollständig berechenbar und prüfbar ist.

Forth-Systeme sind interaktiv. Das heißt, sie haben eine eigene Kommandozeilenschnittstelle eingebaut, auch bei Embedded-Systemen. Entwickler können neue Ideen schnell interaktiv in Forth direkt auf der Zielhardware ausprobieren, ohne einen langsamen "Edit-compile-run"-Zyklus, aus dem bei Embedded-Systemen oft ohne Forth ein "Edit-compile-flash-reset-dead"-Zyklus wird.

Da diese interaktive Kommandozeilenschnittstelle und der Forth-Compiler platzsparend implementiert sind und nicht viel Flash- oder RAM-Speicher verbrauchen, bleiben sie oft in der fertigen Anwendung (meist "versteckt" und per Sonderkommando, Interrupt oder Tastenkombination aktivierbar). Wartungstechniker spielen über diese Schnittstelle bei bestehenden Systemen "im Feld" Änderungen ein oder testen Ad-hoc-Patches aus. Forth selbst ist die Entwicklungsumgebung, oft benötigt man nur einen Laptop als "Terminal" über USB, TCP/IP oder serielle Leitung.

Das "Killer-Feature" von Forth ist jedoch die Erweiterbarkeit des Systems. Hat man sich mit ihm angefreundet, muss man es auch nicht verlassen, wenn etablierte oder moderne Konzepte wie objektorientierte, funktionale, aspektorientierte, logische oder deklarative Programmierung benötigt werden: Diese Konzepte lassen sich mit moderatem Aufwand in jedes Forth-System einbauen. Somit wächst Forth mit den Anforderungen der Programmierer und den neuen Erkenntnissen aus der Informatik – sozusagen als ewig junge Programmiersprache.

Verglichen mit anderen, populären Programmiersprachen ist Forth recht alt, es wurde 1968 von Charles "Chuck" Moore entwickelt. Dabei war Forth immer als Open-Source-Software verfügbar – auch wenn es den Begriff damals noch nicht gab –, die Forth-Implementierungen der Forth Interest Group (FIG) Ende der 1970er-Jahre sorgten für einen Popularitätsschub in der Zeit der Heimcomputer.

Über die Jahrzehnte wurden verschiedene Forth-Standards verabschiedet: Forth-79, Forth-83, ANSI/ISO Forth 1994. Den aktuellen Standard hat das Standard-Team, das sich aus Vertretern der Forth-Entwicklergemeinde und kommerziellen Forth-Anbietern zusammensetzt, 2012 veröffentlicht. Traditionell trifft es sich einmal im Jahr im Rahmen der Euro-Forth-Konferenz. Die Entwicklung des Standards ist nicht abgeschlossen, für die nächsten Jahre wird ein neuer Standard erwartet. Dabei ist er nur eine Empfehlung an die Entwickler, um portable Forth-Programme schreiben zu können. Viele Forth-Systeme bieten Funktionen, die weit über den Standard hinaus gehen.

GNU/Forth (auch gforth genannt) ist die populärste Forth-Implementierung für PC-Systeme und steht unter der GPL. GNU/Forth ist in den Repositories der meisten Linux- und BSD-Systeme verfügbar und lässt sich auch mit Windows, macOS oder exotischen Systemen (Haiku, MorphOS) betreiben. GNU/Forth ist so etwas wie die inoffizielle Referenzimplementierung des Forth-Standards. Viele neue Ideen, die heute im Standard beschrieben sind, wurden unter GNU/Forth implementiert und getestet. Nach über 30 Jahren Entwicklung an GNU/Forth ist in den kommenden Monaten die Version 1.0 zu erwarten.

Auch bei den hardwarenahen Forth-Systemen gibt es interessante Entwicklungen: Die speziell bei Hobby-Elektronikern populäre Propeller-CPU-Architektur hat erst kürzlich mit der Propeller 2 CPU einen Nachfolger erhalten. Das Besondere: Diese CPU hat ein Forth direkt eingebaut (in einem kleinen ROM). Damit lässt sich die CPU allein in Betrieb nehmen, und Entwickler können direkt über Forth mit der CPU interagieren und die eigenen Elektronikprojekte testen. Der Propeller 2 lässt sich auch mit anderen Programmiersprachen wie C, Basic oder Assembler programmieren, jedoch ist Forth aufgrund der geringen Speicheranforderungen direkt eingebaut und immer verfügbar. Wie bei den frühen Homecomputern der 80er-Jahre, bei denen immer ein Basic nach dem Einschalten zum Programmieren einlud.

Wer auf Geschwindigkeit Wert legt, sollte sich Mecrisp Forth von Matthias Koch näher anschauen. Es übersetzt den Quellcode mit einem optimierenden Compiler direkt in die Maschinensprache des Zielsystems (und dabei läuft der Compiler auf dem Zielsystem, nicht auf einem PC). Neben ARM-Architekturen, MSP430 und RISC-V unterstützt Mecrisp-ICE die J1a CPU, eine Open-Source-CPU-Architektur für FPGA-Systeme. Diese Forth-CPU lässt sich mit komplett freier Software in FPGA-Systeme einspielen.

Für Freunde des Arduino (und generell fast aller 8-Bit ATMEL CPUs) gibt es AmForth. Aus Gründen der Speicherplatzeffizienz erzeugt es auf den Zielsystemen einen gefädelten Code (Threaded-Code), der weniger Geschwindigkeit, dafür aber mehr Programm im Flash-Speicher erlaubt. Neben den Atmel CPUs unterstützt AmForth MSP430-Systeme und neuerdings auch ARM (32-Bit) und RISC-V.

Sowohl AmForth als auch Mecrisp implementieren den aktuellen Forth-Standard und sind unter Open-Source-Lizenz verfügbar. Entwickler, die auf kommerziellen Support bei Forth-Projekten angewiesen sind, finden mit SwiftForth (Forth Inc.; USA) und VFX-Forth (MPE; UK und Österreich) ausgereifte Forth-Systeme für PCs und viele Embedded-CPU-Architekturen und Anbindung an zeitgemäße Frameworks wie GTK+ unter Windows/Linux oder Cocoa unter macOS beziehungsweise an TCP/IP-Stacks, Audio-Frameworks der Betriebssysteme.