Hinweis
Dies ist die Website des Fachkurses »One Infinite Loop« an der Bauhaus-Universität Weimar. Du verwendest einen Browser, der gängige Web-Standards nicht oder nur fehlerhaft unterstützt. Daher präsentiert sich Dir diese Seite in einer »abgespeckten« Nur-Text-Fassung. Aktuelle Browser sind kostenlos von Mozilla, Netscape, Microsoft, Opera, Apple und anderen Anbietern für alle gängigen Plattformen verfügbar.
Forth Keep it simple! Do not speculate! Do it yourself!
Forth ist eine native oder natürliche Programmiersprache mit Wurzeln in den späten 50er Jahren. Ihr Erfinder Charles H. Moore arbeitet damals für das »Smithsonian Astrophysical Observatory« und berechnet die Positionen von Planeten, Satelliten und sonstigen Allbewohnern. Um sein Programm nicht so häufig kompilieren zu müssen damals füllt es ganze Lochkarten, entwickelt er einen einfachen Interpreter. Dieser enthält Befehle und Konzepte, die dem heutigen Forth zugrunde liegen.
Charles Moore: »The interpreter began here with the words: WORD NUMBER INTERPRET ABORT ... They werent spelled that way because they were statement numbers. INTERPRET uses WORD to read words separated by spaces and NUMBER to convert a word to binary (in this case, floating-point). Such free-format input was unusual, but was more efficient (smaller and faster) and reliable. Fortran input was formatted into specific columns and typographic errors had caused numerous delays. This interpreter used an IF ... ELSE IF construct, coded in Fortran, finding a match on a single character. Error handling consisted of terminating the run. Then, as now, ABORT asked the user what to do. Since input cards were listed as they were read, you knew where the error was.«
Während seines Aufbaustudiums an der Universität von Stanford entwickelt Moore den Interpreter weiter und ergänzt dessen Funktionen um die Verwaltung des Stapelspeichers (pushdown oder data stack), der Werte für das Register bereithält: Parameter, die Variablen und ihren Wert, sowie arithmetische und vergleichende Operatoren und die Fähigkeit, Prozeduren zu definieren und weiter zu verarbeiten. Von 1965 an arbeitet er als freier Programmierer mit den Sprachen Fortran, Algol, Jovial, PL/I und verschiedenen Assemblern. Als dieser Zeit die ersten Minicomputer mit Bildschirmen aufkommen, entsteht die Notwendigkeit für Moore und seinen Interpreter, Textoperatoren mit ins Programm zu nehmen. Darin folgen ein Fortran-Algol-Übersetzer und Programme zum Editieren von Dateien. Er schreibt seinen ganzen Code in Cobol neu. {ARGH! (Anm. d. KL.)}
1968 wird Moore Mitarbeiter von »Mohasco Industries« in Amsterdam. Dort entwickelt er Grafiksoftware für einen IBM 1130 [16-bit CPU, 8K RAM, Festplatte (Moores erste), Tastatur, Drucker, Lochkartenleser und -Locher als Festplattenbackup] mit 2250 Grafikdisplay, auf dem ein Fortran-Compiler installiert ist. Mit Hilfe eines Assemblerübersetzers portiert er seinen neuen Cobol-Code wieder in Fortran {ARGH! ARGH! (Anm. d. KL.)}. Moore bringt dem IBM 1130 bei, 3D-Animationen zu zeichnen (IBM selbst konnte gerade mal 2D anzeigen), er schreibt seine eigene Version von Spacewar und konvertiert sein Algol-Schachspiel auf dem IBM 1130 in Forth. Da das Programm für Moore dadurch verblüffend einfach wird, erweitert er den Assemblerübersetzer zu einem Compiler. Moore läßt Forth einen Assembler interpretieren, der einen Compiler assembliert, der wiederum den Interpreter kompiliert sogenanntes Meta-Kompilieren oder auch inkrementelles Kompilieren. Dadurch ist es möglich, Forth in Forth zu schreiben, und Moore kann nun in seiner eigenen Entwicklungsumgebung arbeiten. In der Weiterentwicklung bekommt Forth ein Lexikon, in dem die Prozeduren mit Namen benannt sind, wodurch der Interpreter die Möglichkeit bekommt, bei Aufruf einer Prozedur, die nicht im Code folgt, an die entsprechende Stelle zu springen. Ein »return stack« wird entwickelt; der »data stack« kann unbehelligt von Rückgabewerten Parameter übergeben, wodurch Routinen in Forth schachtelbar sind, was man heute objektorientiertes Programmieren nennt {Naja. Sehr grob (Anm. d. KL.)}. Jetzt erst nennt Moore Forth eine Programmiersprache.
1971 ist Forth so weit fortgeschritten, daß es als unabhängiges System funktioniert und gleichzeitig mit Cobol-Modulen arbeiten kann. Die Performance der Forth-Systeme ist gegenüber nativen Betriebssystemen sehr hoch (niedrige Verarbeitungszeiten). Multiuseroperationen werden möglich zu einem Zeitpunkt, als andere Systeme nur davon träumen. Die Vorteile von Forth führen zu einem weltweiten Erfolgszug durch die astronomischen Labore. In den 70ern portiert Moore Forth auf mehr als 18 verschiedene Rechnertypen, schreibt dafür seine eigenen Assembler, Bildschirm- und Festplattentreiber, sowie eigene Multiplikations- und Divisionssubroutinen. Zu seinen Prinzipien, um Code so einfach und schnell wie möglich zu halten, gehört, den Code der Hersteller nicht einfach nur zu verwenden, sondern immer erst zu prüfen, um dann eventuell sogar seinen eigenen neu zu schreiben, weil er ihn jetzt effektiver formulieren kann. Moore läßt sich Forth nicht patentieren, da er der Überzeugung ist, Ideen ließen sich nicht patentieren. Forth bleibt lizenzfrei, die Entwicklung wird seit Mitte der 70er von verschiedenen Personen betrieben. In den 80ern wird Forth unter verschiedenen Betriebssystemen lauffähig gemacht (zum ersten Mal für Apple & LMI, 1980); es läuft heute unter allen gängigen Betriebssystemen. 1979 wird der erste Standard für Forth beschlossen, 1983 eine überarbeitete Version.
1982 verläßt Charles H. Moore die Softwareentwicklung von Forth und widmet sich der Entwicklung von Forth-basierten Mikroprozessoren für spezialisierte Aufgaben vor allem in Astronomie und Raumfahrt. Heute gibt es zahlreiche Varianten von Forth, von denen einige Forth zu einer objektorientierten Programmiersprache entwickelt haben, z. B. Neon und SwiftForth. »Standing joke« der Forth-Programmierer: »When youve seen one Forth ... youve seen one Forth.« Die Programmiersprache Forth hat durch ihren maschinencodenahen Aufbau eine aufs wesentliche reduzierte Syntax und wird eigentlich nur von sehr erfahrenen Programmierern benutzt. Häufig, um kleine Systeme zu bauen, die mit einem Mutterschiff von Betriebssystem operieren, aber auch für kleine Betriebssysteme. Die Forth Inc. zählt z. B. den King Khaled International Airport in Ryadh, Saudi Arabien, zu ihren Kunden. Dort sind sie für das gesamte Computersystem zuständig, welches mit Forth zehnmal schneller arbeitet. Bei Fed-Ex läuft seit 1990 ein Forth-System auf den »hand-helds« der Kuriere und Agenten zur Dateneingabe, außerdem sind Forth-Mikroprozessoren und Programme bei der Nasa in Gebrauch.
Übersicht der Besonderheiten von Forth:
2 * (3 + 5) zu berechnen, würde man in Basic einfach schreiben PRINT 2 * (3 + 5) Dieselbe Berechnung in Forth lautet: 3 5 + 2 * . (man beachte den Punkt). Mit dem Punkt-Befehl wird stets der oberste Zahlenwert auf dem Stack ausgedruckt. Der wesentliche Unterschied zu anderen Programmiersprachen, wie zum Beispiel Basic, liegt nun darin, daß der Operand zum Zeitpunkt des Erreichens des Punkt-Befehls bereits bekannt ist. Der Basic-Interpreter, der auf einen PRINT-Befehl stößt, weiß zu diesem Zeitpunkt ja noch gar nicht, was er ausdrucken soll. Also muß die Information, daß gedruckt werden soll, irgendwo abgespeichert werden. Basic und alle anderen höheren Programmiersprachen bedienen sich dazu eines internen Stacks, der ähnlich wie der Datenstack von Forth konstruiert ist. Letzten Endes liegt also der Unterschied zwischen Forth und anderen Sprachen darin, daß alle anderen Sprachen den vorhandenen Stack vor dem Benutzer verheimlichen und zu diesem Zweck natürlich zusätzlichen Verwaltungsaufwand treiben müssen. Dieser Unterschied ist einer der Gründe für die schnelle Verarbeitungsgeschwindigkeit von Forth-Programmen.Beispiel:
\ pi after Kemeny and Kurtz
\ Back to BASIC, pp. 107-110.
: MUCH-LIKE-PI ( -- f )
CR ." Making pi:"
2.0E \ a = 2
1.0E 2.0E FSQRT F/ \ h = 1/sqrt(2)
24 0 DO
FTUCK F/ \ a = a/h
FTUCK CR F. \ display a
1.0E F+ 2.0E F/ FSQRT \ h = sqrt((1+h)/2)
LOOP FDROP ;
Quellen: