Forth (Informatik)
aus Wikipedia, der freien Enzyklopädie
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 auch ein Forth-System.
Inhaltsverzeichnis |
[Bearbeiten] Entstehungsgeschichte
Diese Eigentümlichkeit einer All-in-One-Lösung lässt sich gut aus der Entstehungsgeschichte heraus erklären. Denn Forth entstand aus einem Problem, das sich Moore gestellt hatte: Er hatte zur Steuerung des Teleskops einer Sternwarte einen Rechner gekauft. Doch war dies wirklich nur ein „nackter“ Rechner - also die reine Hardware ohne jede Software. Also ging er den Weg, alle notwendigen Komponenten selbst zu programmieren, die für eine (komfortable) Programmierung und einen (komfortablen) Betrieb eines Rechners notwendig sind: Ein Betriebssystem, eine Hochsprache und eine Entwicklungsumgebung. Alle diese Komponenten wurden innerhalb eines einzelnen Programms realisiert - dem Forth-System.
Die Vorgehensweise einer All-in-One-Lösung ist ein Sonderweg von Forth geblieben; selbst Programmiersprachen wie Smalltalk oder Self gehen in der Regel nicht soweit, auch das Betriebssystem zu ersetzen (Anm. obwohl dies möglich wäre - doch wünscht man sich dort Portabilität). Normalerweise werden die oben genannten Komponenten getrennt voneinander konzipiert und entwickelt.
Eine komplettere Abhandlung der Geschichte von Forth findet sich hier.
[Bearbeiten] Forth-System
Das Forth-System ist als virtuelle Maschine realisiert. Wesentliche Datenstruktur in Forth ist der Stapel (engl. Stack). Ausdrücke werden in Forth in der umgekehrten polnischen Notation formuliert.
Forth benutzt zur Arbeit zwei Stapel, 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 praktisch nur aus diesem Wörterbuch, wobei die Worte des Kernwortschatzes als Programmteile potentiell eine Doppelfunktion ausfüllen: Einmal regeln sie in ihrem niedergelegten Zusammenspiel die komplette interne Funktionalität des Programmiersystems selbst - einschließlich der präsentierten Benutzerschnittstelle, und gleichzeitig ist jedes einzelne Wort dem Programmierer zur allfälligen eigenen Verwendung für die geplante Anwendung zugänglich. 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; d.h. beliebige eigene Datenstrukturen können implementiert werden
[Bearbeiten] Programmiersprache
Alle Ausdrücke werden in umgekehrter polnischer Notation (UPN) beschrieben. „Umgekehrte polnische Notation“ klingt, als sei das eher kompliziert und unnatürlich, aber damit ist nichts anderes gemeint als beispielsweise Formulierungen wie:
- Wäsche waschen
- Brot schneiden
- sieben addieren (oder als Formel: 7 +)
Also ganz gewöhnlich alltagssprachlich wird erst das Ding genannt, mit dem man etwas tun kann („Wäsche“), und danach das, was man damit macht („waschen“).
Forth funktioniert nach dem Stapel-Prinzip. Wenn man zum Beispiel (5 + 3) * (7 + 2) in Forth ausrechnen will, gibt man folgende Sequenz ein:
- 5 3 + 7 2 + * .
Die Verarbeitung geschieht strikt von links nach rechts: Zuerst werden die Zahlen 5 und 3 auf den Stack "gelegt". Beide werden dann addiert, das Zwischenergebnis 8 kommt auf den Stack. Nun werden darüber die Zahlen 7 und 2 auf den Stack gelegt und addiert, das Zwischenergebnis 9 bleibt auf dem Stack. Zuletzt werden die beiden Zwischenergebnisse multipliziert. Nun liegt das Gesamtergebnis 72 auf dem Stack und wird mit dem abschließenden Punkt am Bildschirn ausgegeben. Wenn man den Punkt nicht angibt, verbleibt das Rechenergebnis auf dem Stapel. Die Auswertung des Forth-Ausdrucks beginnt mit dem Zeilenabschluss (Return).
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.
[Bearbeiten] 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 -- hat ein wiki
- Computer Intelligence Forth -- ein in Assembler geschriebenes ISO-Forth
- eForth von C.H.Ting
- Mops -- Ein object-orientierter Forth-Dialekt für den 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 Source-Code verfügbar von Mountain View Press
- colorForth für den PC, Floppy-Image-Extracter/Source-Reader.
- amforth für den Atmel ATMega Mikrocontroller.
Eine moderne Anwendung für Forth ist das Konzept der Open Firmware (IEEE-1275).
[Bearbeiten] Weblinks
- Forth-Gesellschaft e.V. (Deutschland)
- Forth-Mikrokontroller-Verleih-Webshop
- Instant Programming Tool Holonforth
- ROBOprogy - Spielzeugroboter mit Forth programmieren
- ForthFreak – Ein Wiki über Forth (englisch)
- Chuck Moore's colorForth, VLSI design tools and 25x Forth Multicomputer chip
- news://comp.lang.forth – Englischsprachige Diskussion
- news://de.comp.lang.forth – Deutschsprachige Diskussion
- Links zu Forth
- Forth - die etwas andere Programmiersprache