Forth

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Forth ist eine stack-orientierte Programmiersprache, die von Chuck Moore Ende der 1960er zur Steuerung von astronomischen Radio-Teleskopen entwickelt und in den 1970ern kommerzialisiert wurde. Forth-Systeme lassen sich für praktisch jeden Mikrocontroller mit einer Mindestmenge an RAM erstellen und es gibt Implementierungen in Hardware.

Forth-Programme bestehen üblicherweise aus vielen kurzen Unterprogrammen (Forth-Worte), was gut geschriebene Programme sehr übersichtlich macht. Weil Parameter über einen separaten Daten-Stack übergeben werden, beeinträchtigt diese Programmierweise die Ausführungsgeschwindigkeit nicht wesentlich.

Forth-Derivate findet man an vielen Stellen, von HP-Taschenrechnern bis zu OpenFirmware. Chip-Implementierungen (die also Forth als Maschinensprache verstehen und etwa beide Stacks in Hardware implementieren) gelten als sehr effektiv, sowohl im Verhältnis von erzielbarer Rechenleistung und Anzahl der Transistoren, als auch bei Energieverbrauch oder bei Context-Wechsel.

Der Grundumfang von Forth, samt Interpreter/Compiler haben benötigt in der Regel nur wenige kByte Code. Da die Sprache ihre eigene Erweiterung unterstützt werden dennoch auch umfangreiche Projekte darin realisiert. Es heißt, dass erfahrene Forth-Programmierer innerhalb eines Projektes aus Forth eine auf das Problem zugeschnittene Sprache schaffen, so dass Sprache und Anwendung nicht mehr direkt unterscheidbar sind. Dies hat in der Vergangenheit oft zu Akzeptanzproblemen geführt.

Es wird oft vermutet, dass einer weiteren Verbreitung von Forth vor allem die späte Standardisierung und die Hardwareabhängigkeit des Codes im Wege standen. Dies mag bei der Verwendung von Forth als allgemeine Programmiersprache für Anwendungen zutreffen. Bei Embedded-Software spielt die Portierbarkeit von Code gegenüber dem Einsatz geeigneter Abstraktionen jedoch eine eher untergeordnete Rolle.

Bei modernen Forth-Systemen für Mikrocontroller ist die Einstiegshürde eher niedriger als etwa bei "C", da Programme stufenweise aufgebaut und interaktiv getestet werden können.

Die besonderen Reize von Forth für die Programmierung von Mikrocontrollern liegen:

  1. in der Kompaktheit des Codes (die Wiederverwendung von kleinsten Codesegmenten kann man in anderen Hochsprachen aus Gründen der Übersichtlichkeit und der Performance nicht realisieren)
  2. in der Bandbreite von hardware-nahen Operationen bis zu komplexen Aufgaben
  3. in der Interaktivität: über eine serielle Verbindung mit dem Controller kann man direkt den Interpreter auf dem µC nutzen, um direkte Hardwarezugriffe zu steuern oder Programmteile zu testen; es entfällt der Umweg über Debugcode->Compilieren->Flashen->Testen

Den Vorteil der Interaktivität ist bei viele µC-Implementierungen von Forth eingeschränkt, da sie die Compilierung in den Entwickler-PC verlagern; dabei sinkt zwar die Codegröße (Befehlsnamen etc. müssen nicht mehr im Flash stehen), aber es lässt sich nicht mehr interaktiv debuggen.

Forth unterscheidet prinzipiell nicht zwischen Programm und Daten, was bei Implementierungen auf Prozessoren mit Harvard-Architektur wie AVR zunächst hinderlich ist. Durch die Verwendung eines "innerer Interpreters" lassen sich aber auch diese Systeme mit Forth betreiben.

Weblinks

  • AVR und PIC:
    • FlashForth - ein Forth für PIC18, PIC24/30/33, AVR Atmega
  • Arduni Yún & Raspberry Pi
    • 4th - ein Forth-Compiler für viele Systeme
  • 1802, 6809, 8051, 8052/C8051F, 8086, Z80
  • ARM, RISC-V, Motorola 68000, PDP-11 und asm.js
    • lbForth Compiler, Interpreter und Meta-Compiler der Cross-Compilierung auch für 6502, 8051, AVR, Cortex-M, MSP430, PDP-8, PIC und STM8 unterstützt