Forthschritt 2011

Vor kurzem trafen sich die deutschen Forth-Anhänger zu ihrer Jahrestagung. Grund genug für einen kurzen Blick auf eine alte, neue Programmiersprache, die inzwischen auch andere Sprachen inspiriert.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
Lesezeit: 4 Min.
Von
  • Carsten Strotmann

Die Programmiersprache Forth hat sich in den vergangenen 20 Jahren weitgehend unbemerkt vom Mainstream der Programmiersprachen weiterentwickelt. Forth ist eine concatenative, stack-orientierte Programmiersprache, die so gut wie keine Syntax besitzt und auf sehr einfachen Prinzipien basiert. Sie entstand schon in den 70er Jahren und hat sich seither eine treue Gemeinde von Anhängern erarbeitet.

Beispiele für mit Forth entwickelte kommerzielle Systeme sind das GEOLON-MTS der Firma SEND für das deutsch-indonesische Tsunami-Frühwarnsystem und die Module für den Truck- und Funktionsmodellbau Servonaut der Firma Tematik. Für die Benutzer dieser Produkte ist die Programmiersprache Forth unsichtbar.

Auch Open-Source-Projekte setzen Forth heute ein. So enthält der WikiReader ein Forth als Erweiterungs- und Diagnosesystem, der OLPC (One Laptop Per Child) benutzt Forth als Firmware für den initialen Bootprozess (bevor Linux geladen wird) und auch den FreeBSD-Kern hebt beim Start mit dem 'loader(8)' ein Forth-System in den Speicher.

Forth ist wahrscheinlich die auf die meisten CPU-Architekturen portierte Programmiersprache: Es gibt ein Forth-System für fast alle bekannten CPU-Typen, von kleinsten (4-Bit-) bis zu aktuellen 64-Bit-CPUs. Dies ermöglicht es den Forth-Programmierern bei Bedarf die Architektur zu wechseln und dabei die gewohnte Entwicklungsumgebung mitzunehmen. Forth kann auch direkt als Maschinensprache der CPU vorkommen, wie in den neuen Chips der Firma GreenArrays, die 144 Kerne auf einer Chip-Fläche von 1x1cm unterbringt.

Die Hauptdomäne von Forth ist heute die hardwarenahe Programmierung. Systeme inklusive Compiler, Editor und Kommandozeile lassen sich in wenigen Kilobyte implementieren, und sie sind ideal für stromsparende Mikrokontroller-Systeme. Anders als bei Cross-Compiler Sprachen wie C oder BASIC, die es auch für die gängigen Mikrokontroller gibt, findet bei Forth die Entwicklung meist interaktiv direkt auf der Zielhardware statt. Dies beschleunigt die Entwicklungszeit und erlaubt es, auch in ausgelieferten Produkten noch interaktiv Änderungen vornehmen zu können.

Factor ist eine relativ junge, stack-orientierte Programmiersprache, die interessante Eigenschaften von Lisp, Smalltalk und Forth vereinigt. Entwickelt wird Factor seit 2003 als Open-Source-Projekt von einem Team rund um den Entwickler Slava Pestov (auch bekannt durch das JEdit-Projekt). Parameter werden wie in Forth in Postfix-Notation über den Stack an Funktionen übergeben. Anders als Forth ist Factor streng-typisiert, und der Stack kann verschiedene Datentypen wie Zahlen, Wahrheitswerte, Strings und auch Funktionen enthalten.

Schleifen und Verzweigungen sind wie in Ruby oder in JavaScript-Frameworks durch Funktionsblöcke realisiert:

2 even? [ "gerade" ] [ "ungerade" ] if print

Die Funktion if (in Factor spricht man vom "Wort if") erwartet einen booleschen Wert und je eine Funktion für den "Wahr"- und den "Falsch"-Zweig der Auswertung auf dem Stack. Die eckigen Klammern [] erzeugen anonyme Funktionen auf dem Stack. Ähnlich funktionieren Schleifen:

{ "eins" "zwei" "drei" "vier" } [ print ] each

Die geschweiften Klammern erzeugen ein Array (hier mit 4 Werten), das Wort each erwartet einen Collection-Typ (hier ein Array) und eine Funktion auf dem Stapel. Diese Funktion ruft each für jeden Wert der Collection auf. Die aus Ruby, Groovy und Scala bekannten Operatoren wie map, filter oder reduce gibt es auch in Factor.

Speicher verwaltet Factor dynamisch per Garbage-Collection, der Programmierer muss sich nicht darum kümmern. Das OO-System von Factor ist dem Common Lisp Object System (CLOS) entlehnt. Der Entwickler kann wie in Smalltalk kann die gesamte Sprachumgebung inklusive aller Klassen, Wörter und Datenstrukturen interaktiv per "Word-Browser" erkundet. Per "Read-eval-print loop" (REPL)[3] werden Factor Befehle interaktiv eingegeben und getestet. Anders als andere dynamischen Sprachen übersetzt Factor per eigenem Compiler direkt in Maschinencode und ist für die meisten Anwendungsfälle in der Ausführung schneller als dynamische Script-Sprachen oder JVM-Implementierungen (Groovy, JRuby).

Factor kommt mit einer umfangreichen Bibliothek an Schnittstellen für GUI-, XML- und Netzwerkprogrammierung. Es ist erhältlich für x86- und x86-64-Systeme unter Windows, Linux, MacOS X, FreeBSD sowie OpenBSD.

Einen Einstieg in Forth bieten die Workshops der Forth Gesellschaft auf Basis der Arduino Boards. Diese Workshops finden in diesem Jahr auf Open Source Treffen wie FROSCON, dem LUGCAMP und der OpenRheinRuhr statt. (ck)