Forth

Aus C64-Wiki
Wechseln zu: Navigation, Suche

Dieser Artikel behandelt die Programmiersprache Forth in Sicht der Commodore Computersysteme.

Forth wurde 1969 von Charles H. Moore entwickelt, wobei in weiterer Folge auch Elizabeth Rather bedeutenden Einfluss hatte.[1] Forth ist zugleich Programmiersprache und Entwicklungsumgebung, wobei es unabhängig von einem Betriebssystem ist und die notwendigen Funktionen selbst zur Verfügung stellt. Dies war gewissermaßen eine Notwendigkeit, nachdem die ersten Einsatzgebiete eher den Charakter eines Embedded-Systems hatten bzw. über gar kein Betriebssystem verfügten. Auch Multitasking war in etlichen Implementierungen vorhanden, weil damalige Betriebssysteme (sofern vorhanden) oft ein solches Konzept nicht kannten. Spätere Forth-Umgebungen waren dann sehr wohl in die jeweilige Betriebssystemumgebung eingebettet, wo auch Floatingpoint, Grafik- und GUI-Bibliotheken und die vorliegende Massenspeicherverwaltung Verwendung fanden.
Es ist für viele unterschiedliche Minicomputer, Embedded-System-Boards und Mikrocomputer, unter anderem auch für den C64, erhältlich. Ein tatsächlich implementiertes Forth nennt man Forth-System.

Entstehungsgeschichte[Bearbeiten]

Forth wurde auf einem IBM-1130 Minicomputer (mit IBM-2250 Display/Terminal) entwickelt auf der Basis eines in Algol programmierten Schachspiels entwickelt. Ursprünglich sollte die Sprache Fourth heißen, womit Moore auf den zukünftigen Einsatz in vielen dezentralen kleinen Mikrocomputern hinweisen wollte und dies als nächsten Schritt nach der so genannten "dritte Generation" der damaligen Programmiersprachen auf zentralen Systemen sah. Zu dieser Zeit ließ die Programmierumgebungen jedoch nur Dateinamen mit maximal fünf Buchstaben zu, weswegen Moore sich für das Homophon Forth als Name entschied. Die Großschreibung des Namens in den Anfangsjahren leitete sich aus dem Zwang ab, dass die IBM-2250 nur Großbuchstaben zuließ. Nachdem etliche Minicomputer bereits das Ziel einer Forth-Umsetzung waren, wurde ab Mitte der 1970er Forth auf zahlreiche Heim- und Personalcomputer portiert. Mit FORTH-77 manifestierte sich 1977 der erste vorläufige Forth-Standard, der 1979 in den ersten offiziellen FORTH-79-Standard mündete.

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, auf ein Betriebssystem verzichten zu können. Das ist als entscheidender Vorteil zu sehen, Forth rasch auf eine beliebige Hardware portieren zu können. Auch Oberon, das im Rahmen des Ceres-Systems entwickelt wurde, ist unabhängig von einem Betriebssystem erhältlich. Normalerweise werden die oben genannten Komponenten getrennt voneinander konzipiert und entwickelt.

Eine umfangreichere Abhandlung der Geschichte von Forth findet sich in der Publikation ACM SIGPLAN Notices, March 1993.[2]

Standardisierungen

(in der Reihenfolge des Erscheinens)

  1. FIG Forth model (ein weit verbreitetes Portierungsmodell der Forth Interest Group, 1978)
  2. FORTH-79 standard (1979)
  3. FORTH-83 standard (1983)
  4. ANS Forth standard (ANSI technical committee X3J14 24. März 1994)
  5. Forth 2012 Standard [3] (2014)

Verwendung[Bearbeiten]

Wegen der kompakten internen Darstellung der Forth-Programme im Speicher und die gegenüber reinem Maschinencode "nur" um den Faktor 10 schlechteren Ausführungszeiten (zum Vergleich: noch immer eine Größenordnung schneller als etwa vergleichbare BASIC-Programme) bietet sich an, aufwendige Applikationen in einer für die Entwicklung komfortablen Forth-Umgebung zu erstellen. Ein populäres Beispiel dafür ist etwa die Tabellenkalkulation Calc Result, die als Steckmodul für den C64 angeboten wurde und damit auch die Umsetzung von komplexen Anwendung auf 8-Bit-Plattformen bewies.
Auch für die Spieleentwicklung eignet sich Forth aus oben genannten Gründen und wurde beispielsweise bei der Entwicklung des Spiels Starflight eingesetzt.[4]

Von Forth beeinflusst ist die Programmiersprache Factor[5] und vereint auch Elemente aus Lisp und Smalltalk. Sie orientiert sich jedoch stärker an die Anwendungsentwicklung und weniger an der Low-Level-Funktionalität üblicher Forth-Systeme.

Im Homecomputer-Bereich hat Forth als Basisumgebung lediglich mit dem Jupiter Ace[6], einem Sinclair-ZX81-Klon im ZX-80-Gehäuse mit Forth im ROM (für den Z80), einen Start versucht. Für Systeme mit eingeschränkten Ressourcen stellte das eine ideale Kombination dar. Der Erfolg blieb aber dennoch aus und 1983 war dieser Exot in der breiten Masse der BASIC-Homecomputer untergegangen. Dies nicht zuletzt deswegen, weil sich die Ansprüche an Hardware und Unterstützung durch ein entsprechendes Softwareangebot, allzu rasch weiter entwickelten und minimalistische Konzepte nicht mehr für sich tragfähig waren.

Für den Embedded-Systems-Bereich, wo Forth seine Wurzeln hat, war es dann auch naheliegend, eine hardware-nahe Unterstützung für Forth umzusetzen. Ein Vorreiter dieser Idee war der auf 6502-Variante basierende Rockwell 65F11- und 65F12-CPU, die spezielle Forth unterstützende Opcodes samt zugehöriger Implementierung im Masken-ROM bzw. über Erweiterungs-ROMs aufwies. Weitere Umsetzungen bis zum heutigen Tage folgten.[7]

Außerdem findet sich Forth in vielen kleineren, sehr kundenorientierten Embedded-Systems-Projekten. Populärer hingegen ist der Einsatz bei der Rosetta Lander Common DPU (basierend auf einer Harris RTX2010 16-Bit-CPU[8]).

Zu den neueren Entwicklungen[9] zählt das von RS-Components vertriebene Selbstbau-Kit FIGnition inFUZE, ein Single-Board-Computer[10] basierend auf Atmel AVR 8-Bit mit 20 MHz und 8 KByte RAM, das eine FORTH-Interpreter-/Compiler-Firmware enthält und ergänzend Dienstprogramme und Beispielprogramme[11] inkludiert.

Implementierungen[Bearbeiten]

HES 64Forth (1983).
DurexForth (2009).

Die Massenspeicherverwendung ist je nach Implementierung höchst unterschiedlich gelöst. Prinzipiell benötigt Forth einen blockorientierten Massenspeicher (üblicherweise ein Floppy-Laufwerk), um dort in Form von 1024-Zeichen großen Screens (welche den Sourcecode-Text enthalten) selbst zu organisieren.
Manche Implementierungen verwenden das CBM-Dateisystem lediglich für den rohen Zugriff direkt auf die Blockstruktur.
Andere Variante hingegen legen die Screens einfach als Dateien des CBM-Dateisystems ab (z.B. als sequenzielle Dateien, wie etwa bei C64 Forth/79 von Micro Productions).

Unabhängig von der konkreten internen Forth-Massenspeicherverwaltung, gibt es entsprechende Erweiterungen und Definitionen, um auf Daten des CBM-Dateisystem wie gewohnt zuzugreifen. Nicht selten orientiert sich das an dem Schema wie BASIC mit Dateien umgeht bzw. ist die Schnittstelle an die KERNAL-Funktionen angelehnt.

C64[Bearbeiten]

Eine Übersicht der vielen Forth-Implementierung (komerzielle und Open Source) für den C64:

C128[Bearbeiten]

C128 im CP/M-Modus[Bearbeiten]

Literatur[Bearbeiten]

Weblinks[Bearbeiten]

WP-W11.png Wikipedia: Forth (Informatik)
WP-W11.png Wikipedia: Forth (programming language) Sprache:english

Quellen[Bearbeiten]

  1. Entwurf für einen Beitrag der History of Programming Languages II Konferenz, Chuck Moore, 1991 Sprache:englisch
  2. ACM SIGPLAN Notices, Volume 28, No. 3, March 1993 Sprache:englisch
  3. Forth 2012 Standard Sprache:englisch
  4. Wikipedia: Starflight (Development) Sprache:englisch
  5. dt. Wikipedia: Programmiersprache Factor
  6. Jupiter Ace Sprache:englisch
  7. Forth-Chips Sprache:englisch
  8. Command and Data Management Subsystem (CDMS) of the Rosetta Lander (Philae) Sprache:englisch
  9. Ankündigung "FIGnition inFUZE" von RS-Components, 2013-08-27
  10. FIGnition FUZE Single-Board-Computer bei RS-Components
  11. FIGnition FUZE Website Sprache:englisch
  12. 64FORTH Sprache:englisch
  13. Blazin' Forth at ftp.forth.org Sprache:englisch
  14. DurexForth bei github.com Sprache:englisch
  15. Forth 64 cartridge at richardlagendijk.nl Sprache:niederländisch / Sprache:englisch / Sprache:deutsch
  16. forth128.blogspot.se Sprache:englisch