- Forth (Programmiersprache)
-
Forth wurde von Charles H. Moore 1969 entwickelt und ist in erster Linie als Programmiersprache bekannt geworden. Forth ist aber nicht nur eine Programmiersprache, sondern gleichzeitig ein Betriebssystem und eine Entwicklungsumgebung zur Erstellung von Forth-Programmen. Daher nennt man ein tatsächlich implementiertes Forth auf einem Rechner ein Forth-System.
Inhaltsverzeichnis
Entstehungsgeschichte
Diese Eigentümlichkeit einer umfassenden Lösung lässt sich gut aus der Entstehungsgeschichte[1] heraus erklären. Moore hatte zur Steuerung des Teleskops einer Sternwarte einen Rechner ohne Software gekauft. Er hatte sich vorgenommen, alle notwendigen Komponenten selbst zu programmieren, die für eine (komfortable) Programmierung und den (komfortablen) Betrieb des Rechners notwendig sind. Hierzu gehören ein Betriebssystem, eine Hochsprache und eine Entwicklungsumgebung. All diese Komponenten wurden innerhalb eines einzelnen Programms verwirklicht – dem Forth-System.
Die Vorgehensweise einer so genannten „All-in-One-Lösung“ ist ein Sonderweg von Forth geblieben. Selbst Programmiersprachen wie Smalltalk oder Self gehen (in der Regel) nicht so weit, auch das Betriebssystem zu ersetzen. Obwohl dies möglich wäre, wünscht man sich meist Portabilität. Auch die Programmiersprache Oberon, die im Rahmen des Ceres-Systems entwickelt wurde, ist unabhängig von diesem erhältlich. Normalerweise werden die oben genannten Komponenten getrennt voneinander konzipiert und entwickelt.
Factor ist eine auf Forth aufbauende Programmiersprache, die sich jedoch stärker an die Anwendungs-Entwicklung orientiert als an der Low-Level-Funktionalität von Forth.
Forth-System
Das Forth-System ist als virtuelle Maschine realisiert. Die wesentliche Datenstruktur in Forth ist der Stapel (englisch stack). Ausdrücke werden in Forth in der umgekehrten polnischen Notation (UPN) formuliert.
Forth benutzt zur Arbeit zwei Stapel: Den einen für Daten, den anderen (returnstack) für die Rücksprungadressen beim Verzweigen in Unterprogramme (Subroutinen). Programmcode wird in Forth durch die Definition von Worten (words) in einer Bibliothek (dictionary) abgelegt.
Ein Forth-System besteht aus dem Wörterbuch, wobei die Worte des Kernwortschatzes als Programmteile potentiell eine Doppelfunktion ausfüllen. Interaktiv lässt sich der Wortschatz Schritt für Schritt erweitern. Das soll heißen: Ein Forthsystem ist (bis auf den Kern) komplett in Forth programmiert, so dass es leicht auf neue Rechner und Betriebssysteme übertragen werden kann. Assemblercode (üblicherweise auch in Forth-Notation) gibt es nur in Worten, die die Anbindung an die Umgebung bewerkstelligen, oder in denjenigen, die das Arbeitstempo des Systems bestimmen.
Forth hat zwei wesentliche Eigenschaften, die es von vielen anderen Programmiersystemen seiner Zeit unterscheiden:
- Forth war von Beginn an Open Source
- Forth erlaubt dem Anwender Zugriff auf den Compiler; dadurch können beliebige eigene Datenstrukturen implementiert werden
Beispiel eines UPN Ausdrucks
Für die Berechnung des Ausdrucks
(5 + 3) * (7 + 2)
wird in Forth die folgende Sequenz eingegeben:5 3 + 7 2 + * .
Die Verarbeitung erfolgt nach der Eingabe des Zeilenabschlusses (Eingabetaste).
- Im gegebenen Beispiel werden die Zahlen 5 und 3 auf dem Stapel gelegt. Der Plus-Operator ersetzt die beiden Operanden (also fünf und drei) auf dem Stapel durch die Summe 8. Die Summenbildung wird nun für die Zahlen 7 und 2 wiederholt. Auf dem Stapel befinden sich jetzt die Werte 8 und 9. Der Multiplikations-Operator ersetzt dann die Werte durch das Produkt 72. Der Punkt am Ende der Eingabe gibt das Ergebnis aus.
Wörter für Stack-Operationen
Befehl Stack Beschreibung DUP n1 n2 → n1 n2 n2 dupliziert das oberste Stack-Element SWAP n1 n2 n3 → n1 n3 n2 vertauscht die obersten beiden Stack-Elemente ROT n1 n2 n3 n4 → n1 n3 n4 n2 holt das dritte Stack-Elemente nach oben OVER n1 n2 n3 → n1 n2 n3 n2 kopiert das zweite Stack-Element PICK n1 n2 n3 2 → n1 n2 n3 n1 kopiert das angegebene (hier: 2 entspr. dritte) Stack-Element DROP n1 n2 n3 n4 → n1 n2 n3 entfernt das oberste Stack-Element Forth eignet sich für das interaktive Entwickeln von Steuerungssystemen. Da sind dann Programmpassagen möglich wie:
- Ventil öffnen
- Hupe einschalten
- usw.
Die frühesten bekannten Anwendungen waren Steuerungen für Observatorien, denn die eingangs genannte Teleskopsteuerung wurde von vielen anderen Observatorien übernommen.
Ein Forth-Interpreter kann ressourcenschonend implementiert werden. Deshalb eignet sich die Sprache auch besonders gut für Microcontroller. Ideal ist ein kombiniertes System: Das Programm wird in Klartext mit allen Kommentaren auf dem PC geschrieben und gespeichert. Dieser Text ist oft einige hundert Kilobyte lang und würde nicht in den beschränkten Speicher eines Controllers passen. Nur die sehr kompakte Zusammenfassung davon (ein Befehl = ein Byte) wird zum Microcontroller übertragen und dort abgearbeitet. Ein praktisches Beispiel für kleinere Roboter findet man in ROBOprogy. Jüngste Entwicklung ist das Colorforth von Charles H. Moore. Ältere FORTH-Derivate sind das GraFORTH sowie das Messdatenanalyse-System ASYST.
Freie Forth-Systeme
- amrFORTH — 8051 Tethered Forth für Windows/OSX/Linux/*BSD
- Reva — Pentium (Linux und Windows)
- pbForth — für den Hitachi H8 in LEGO Mindstorms Robotics Invention System als Alternative
- PFE — Portable Forth Environment
- Gforth — GNU Forth Language Environment
- bigFORTH — x86 native code Forth mit MINOS GUI
- kForth — Kleiner Forth-Interpreter, in C++ geschrieben
- SP-Forth (SPF) — OpenSource Forth für Win32
- Informationen über Forth für 8-bit Home-Computer (Atari, Apple, ZX-80, …)
- RetroForth — Public Domain, für DOS, Linux, FreeBSD, Windows oder standalone -- hat ein wiki
- pForth — PD portables Forth in 'C' für Embedded Systeme oder Desktops.
- herkforth — Ein colorForth für Linux/PPC
- Computer Intelligence Forth — ein in Assembler geschriebenes ISO-Forth
- eForth von C.H.Ting
- Mops — Ein objektorientierter Forth-Dialekt für den Apple-Macintosh, basiert auf dem früher kommerziellen Neon
- GraFORTH — Forth für den Apple ][ mit AV Primitiven (ShrinkIt archive)
- Win32Forth — Forth für Microsoft Windows 95/2000/XP
- MVP Forth Quelltext verfügbar, von Mountain View Press
- colorForth für den PC, Floppy-Image-Extracter/Source-Reader.
- amforth für den Atmel ATMega-Mikrocontroller (GPL).
- Holon — eine Forth-basierte integrierte Entwicklungsumgebung.
- SwiftFORTH und SwiftX — professionelles FORTH für PC und Mikrocontroller
Eine moderne Anwendung für Forth ist das Konzept der Open Firmware (IEEE-1275).
Weblinks
- Forth-Gesellschaft e.V. (Deutschland)
- Instant Programming Tool Holonforth
- ROBOprogy — Spielzeugroboter mit Forth programmieren
- Chuck Moore's colorForth, VLSI design tools and 25x Forth Multicomputer chip
- Forth - die etwas andere Programmiersprache
- http://www.intellasys.net/ Forth-Hardware
Quellen
Wikimedia Foundation.