||
[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.
- Forth ist interaktiv, weist aber gleichzeitig auch Kompilereigenschaften auf. Eingegebener Quelltext wird in eine Art Zwischencode übersetzt. Aufgrund der Interaktivität auf der einen und der hohen Kompilationsgeschwindigkeit auf der anderen Seite reduziert sich die Programmentwicklungszeit unter Forth auf ein Minimum.
- In Forth gibt es die für Programmiersprachen sehr ungewöhnliche Möglichkeit, durch "Forget" einen Compiliervorgang rückgängig zu machen.
- Forth vereinigt Elemente einer Hochsprache mit Elementen einer assemblernahen Sprache. So kann z. B. Maschinencode beliebig mit Hochsprache kombiniert werden, was u. U. zu einer weiteren Geschwindigkeitssteigerung führt.
- Ein großer Teil dieser Sprache ist durch sich selbst definiert. Dies kann natürlich nicht beliebig fortgesetzt werden, denn keine Sprache kann vollständig in sich selbst definiert sein. Irgendwann wird ein Forth-Wort nicht mehr aus weiteren Forth-Worten, sondern direkt aus Maschinencode bestehen.
- Zwar bietet Forth dem Benutzer standardmäßig keine formalen Datentypen, es erlaubt jedoch die Definition beliebiger Datentypen.
- Bei Zahlen ist übrigens noch eine Besonderheit zu beachten: Forth kann in beliebigen Zahlensystemen rechnen. Die Systemvariable "Base" enthält die jeweils gültige Zahlenbasis. In der Regel wird man entweder im Dezimal- oder im Hexadezimalsystem arbeiten. Daher kennt Forth zwei spezielle Befehlsworte zum umschalten in das jeweilige Zahlensystem, nämlich "Decimal" und "Hex".
- Ein Forth-System kommt mit geringem Speicherplatz aus. So kann ein Minimalsystem durchaus in 2 oder 3 KByte untergebracht werden.
- Ein wichtiger Unterschied zwischen Forth und anderen Programmiersprachen liegt in der Stack-Architektur von Forth (data und return stack). Dadurch ergibt sich in der Notation eine entscheidende Änderung. Forth arbeitet nämlich in umgekehrter polnischer Notation (UPN = Postfix-Notation).
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