|                                                                                                        |


[zurück] : [anfang] : [L4 english] : [L4 deutsch] :-: [F4 english] : [F4 deutsch] :-: [mail] : FORTH e.V.

One Infinite Loop
Programmieren für Designer und Medienschaffende
2003, Niels Heidenreich
 
Hausaufgabe 01: Forth

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 2 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 weren't 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 vom Stapelspeicher (push[down/up] oder data stack), der Werte für das Register bereithält: Parameter, die Variablen und ihren Wert, 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 Dateien editieren. Er schreibt seinen ganzen Code in Cobol neu.

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. Moore bringt den IBM 1130 bei 3D-Animationen zu zeichnen (IBM selbst konnte gerade mal 2D anzeigen), er schreibt seine eigene Version von Spacewar und konvertiert es in ein 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 Kompiler. Moore läßt Forth einen Assembler interpretieren, der einen Kompiler assembliert, der wiederum den Interpreter kompiliert, sogenanntes Meta-Kompilen oder auch inkrementeller Kompiler. 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 werden. Dies ist eine frühe Vorstufe dessen, was man heute objektorientiertes Programmieren nennt. Jetzt erst nennt Moore Forth eine Programmiersprache.

1971 ist Forth soweit fortgeschritten, daß es als unabhängiges System funktioniert und gleichzeitig mit Cobol-Modulen arbeiten kann. Die Performance (niedrige Verarbeitungszeiten) der Forth-Systeme ist gegenüber nativen Betriebssystemen sehr hoch, 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 seid 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 von 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, SwiftForth; "standing joke" der Forth-Programmierer: "When you've seen one Forth ... you've seen one Forth." Die Programmiersprache Forth hat durch ihren maschinencodenahen Aufbau eine auf's 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 10 x schneller arbeitet. Bei Fed-Ex läuft seit 1990 ein Forth-System auf den "hand-helds" zur Dateneingabe der Kuriere und Agenten, außerdem sind Forth-Mikroprozessoren und Programme bei der Nasa in Gebrauch.

Übersicht der Besonderheiten von Forth:

Forth legt generell erst die für einen Befehl benötigten Operanden auf den Stack, und der Befehl greift anschließend darauf zu. Um zum Beispiel den Wert des Ausdrucks 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 da zu 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:

  • http://www.forth.com/Content/History/History1.htm // ausführliche Geschichte von Forth
  • http://www.colorforth.com/HOPL.html // der "Erfinder" spricht
  • http://www.zock.com/64er/8407/0011.html // gute Kurzvorstellung
  • http://www.lxhp.in-berlin.de/lhpf8td.html // Einführung in die Forth-Programmierung
  • http://www.stcarchiv.de/stc1987/03_forth.php3 // Vorstellung von Forth-Besonderheiten
  • http://www.albany.net/~hello // Forth für Anfänger
  • http://www.stejskal.de/web/computer/forth // Sammelsurium einer ziemlich spezialisierten Forth-Gemeinde
  • zusammengetragen von sfouche, 08.05.2003

    0-4