Benutzer-Werkzeuge

Webseiten-Werkzeuge


infos:wasistforth

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
infos:wasistforth [2017-05-12 01:41] – [Das Programmiersystem Forth] mkainfos:wasistforth [2017-05-12 01:47] (aktuell) mka
Zeile 13: Zeile 13:
 ===== Konzepte ===== ===== Konzepte =====
  
-Forth basiert auf dem Konzept einer Zwei-Stackmaschine. Jegliche Datenverarbeitung wird auf dem sogenannten Datenstack ausgeführt; alle Forth-Operatoren entnehmen ihm ihre Aufrufparameter und hinterlassen auf ihm die Ergebnisse. Der Datenstack dient so zur Parameterübergabe zwischen den Operatoren. Als Konsequenz dieser Arbeitsweise verwendet Forth eine Postfix-Notation für die Reihenfolge von Parametern und Operatoren.+Forth basiert auf dem Konzept einer Zwei-Stackmaschine. Jegliche Datenverarbeitung wird auf dem sogenannten //Datenstack// ausgeführt; alle Forth-Operatoren entnehmen ihm ihre Aufrufparameter und hinterlassen auf ihm die Ergebnisse. Der Datenstack dient so zur Parameterübergabe zwischen den Operatoren. Als Konsequenz dieser Arbeitsweise verwendet Forth eine Postfix-Notation für die Reihenfolge von Parametern und Operatoren.
  
-Beispiel:+==== Beispiel 1 ====
  
   3 5 + 7 * . <cr> 56 ok    3 5 + 7 * . <cr> 56 ok 
 legt interaktiv zuerst die Zahl ''3'' auf den Stack und danach die Zahl ''5'' darauf. Das ''+'' (eine elementare Forth-Operation) wird aufgerufen, addiert beide Werte und ersetzt sie auf dem Stack durch das Ergebnis (''8''). Nachfolgend wird ''7'' auf den Stack gelegt und mittels ''*'' das Ergebnis berechnet. Der Operator ''.'' gibt schließlich den obersten Stackeintrag auf dem Schirm als Integerzahl aus. Mit dem abschließenden ''ok'' zeigt Forth an, dass die Zeile verarbeitet und das System für neue Aufgaben bereit ist. legt interaktiv zuerst die Zahl ''3'' auf den Stack und danach die Zahl ''5'' darauf. Das ''+'' (eine elementare Forth-Operation) wird aufgerufen, addiert beide Werte und ersetzt sie auf dem Stack durch das Ergebnis (''8''). Nachfolgend wird ''7'' auf den Stack gelegt und mittels ''*'' das Ergebnis berechnet. Der Operator ''.'' gibt schließlich den obersten Stackeintrag auf dem Schirm als Integerzahl aus. Mit dem abschließenden ''ok'' zeigt Forth an, dass die Zeile verarbeitet und das System für neue Aufgaben bereit ist.
  
-Der zweite Stack, Returnstack genannt, speichert die Rückkehrinformationen bei verschachteltem Aufruf von Unterprogrammen, d. h. sobald ein Forth-Wort weitere aufruft.+Der zweite Stack, //Returnstack// genannt, speichert die Rückkehrinformationen bei verschachteltem Aufruf von Unterprogrammen, d. h. sobald ein Forth-Wort weitere aufruft.
  
 Forth bietet eine interaktive Arbeitsweise bei Programmentwicklung und -test. Der Quellcode besteht aus einzelnen Sequenzen, die durch einen Compiler zu Unterprogrammen, genannt Worte, übersetzt werden. Neu erstellte Worte sind dem schon vorhandenen Basiswortschatz eines Forth-Systems gleichgestellt und erweitern damit den verfügbaren elementaren Wortschatz um leistungsfähigere und problembezogene Komponenten. Forth bietet eine interaktive Arbeitsweise bei Programmentwicklung und -test. Der Quellcode besteht aus einzelnen Sequenzen, die durch einen Compiler zu Unterprogrammen, genannt Worte, übersetzt werden. Neu erstellte Worte sind dem schon vorhandenen Basiswortschatz eines Forth-Systems gleichgestellt und erweitern damit den verfügbaren elementaren Wortschatz um leistungsfähigere und problembezogene Komponenten.
Zeile 26: Zeile 26:
 Alle Worte lassen sich mit Parametern versehen (indem man diese auf dem Stack bereitstellt), über einen Interpreter aufrufen und die Ergebnisse inspizieren. Da Compiler und Interpreter gemeinsamer Bestandteil eines Forth-Systems sind, erlaubt dies einen sehr kurzen Edit-Compile-Test-Zyklus und ermutigt dadurch zu einer inkrementellen Arbeitsweise, bei der jeweils einzelne Worte neu hinzugefügt und komplett ausgetestet werden, ehe eine weitere Definition auf diesem Wort aufbaut. Ebenso kann man auf diese Weise Hardwareeinheiten des Rechners per Kommando ansprechen, kurze Codesequenzen austesten u. v. m. Dies erlaubt es, sich einem neuen unbekannten Problem (Hard- oder Software) interaktiv zu nähern, mit ihm zu experimentieren. Alle Worte lassen sich mit Parametern versehen (indem man diese auf dem Stack bereitstellt), über einen Interpreter aufrufen und die Ergebnisse inspizieren. Da Compiler und Interpreter gemeinsamer Bestandteil eines Forth-Systems sind, erlaubt dies einen sehr kurzen Edit-Compile-Test-Zyklus und ermutigt dadurch zu einer inkrementellen Arbeitsweise, bei der jeweils einzelne Worte neu hinzugefügt und komplett ausgetestet werden, ehe eine weitere Definition auf diesem Wort aufbaut. Ebenso kann man auf diese Weise Hardwareeinheiten des Rechners per Kommando ansprechen, kurze Codesequenzen austesten u. v. m. Dies erlaubt es, sich einem neuen unbekannten Problem (Hard- oder Software) interaktiv zu nähern, mit ihm zu experimentieren.
  
-Beispiel:+==== Beispiel 2 ====
  
   : Quadrat ( n ¨C n^2 ) DUP * ;   : Quadrat ( n ¨C n^2 ) DUP * ;
Zeile 38: Zeile 38:
 ===== Arbeitsweise ===== ===== Arbeitsweise =====
  
-Intern werden Forth-Worte in einem Wörterbuch (Dictionary) verwaltet. Dieses läßt sich thematisch in unterschiedliche Wortlisten (Wordlists oder Vocabularies) gliedern. Zu jedem Wort gehören sein Name, einige Statusflags und je ein Verweis auf zugehörige Daten und auszuführenden Code.+Intern werden Forth-Worte in einem Wörterbuch (//Dictionary//) verwaltet. Dieses lässt sich thematisch in unterschiedliche Wortlisten (//Wordlists// oder //Vocabularies//) gliedern. Zu jedem Wort gehören sein Name, einige Statusflags und je ein Verweis auf zugehörige Daten und auszuführenden Code.
  
-Forth arbeitet immer in einem von zwei Modi; Interpretation oder Compilation. Ein Textinterpreter verarbeitet den Eingabestrom, der von Tastatur oder einem Massenspeicher kommt, und zerlegt ihn in eine Folge von durch Leerzeichen getrennte Zeichenketten. Diese Zeichenketten werden im Wörterbuch gesucht und im Interpretermodus wird ihr zugehöriger Code aufgerufen. Zahleneingaben werden entsprechend konvertiert und auf dem Stack abgelegt. Der '':'' (Colon) ist ein Forth-Wort wie alle anderen; er legt jedoch einen neuen Wörterbucheintrag mit dem Namen des neuen Wortes an und schaltet den Compilermodus ein. Nun werden für die meisten Worte aus dem Eingabestrom entsprechende Aufrufe in das neu angelegte Wort kompiliert. Demzufolge besteht ein kompiliertes Forth-Wort aus einer Folge von Aufrufen anderer Wörter, die dann entsprechend abgearbeitet werden.+Forth arbeitet immer in einem von zwei Modi; Interpretation oder Compilation. Ein Textinterpreter verarbeitet den Eingabestrom, der von Tastatur oder einem Massenspeicher kommt, und zerlegt ihn in eine Folge von durch Leerzeichen getrennte Zeichenketten. Diese Zeichenketten werden im Wörterbuch gesucht und im Interpretermodus wird ihr zugehöriger Code aufgerufen. Zahleneingaben werden entsprechend konvertiert und auf dem Stack abgelegt. Der '':'' (//Colon//) ist ein Forth-Wort wie alle anderen; er legt jedoch einen neuen Wörterbucheintrag mit dem Namen des neuen Wortes an und schaltet den Compilermodus ein. Nun werden für die meisten Worte aus dem Eingabestrom entsprechende Aufrufe in das neu angelegte Wort kompiliert. Demzufolge besteht ein kompiliertes Forth-Wort aus einer Folge von Aufrufen anderer Wörter, die dann entsprechend abgearbeitet werden.
  
-Einige Worte mit einem speziellen Immediate-Flag werden im Compilermodus nicht kompiliert sondern statt dessen ausgeführt. Diese Immediate-Worte sind Compiler-Hilfsworte, die dem Aufbau spezieller Sprachkonstrukte dienen. Ein ''IF'' kompiliert z. B. eine entsprechende Sprungstruktur in das neue Wort. Das abschließende ''THEN'' (in älteren Dialekten manchmal ''ENDIF'') kann dann auf eine korrekte Verschachtelung prüfen und Sprungziele auflösen. Ein weiteres Immediate-Wort ist das ; welches die Definition beendet und das System zurück in den Interpretermodus versetzt. Da der Programmierer selbst Immediate-Worte schreiben kann, hat er damit die Möglichkeit auch den Compiler selbst zu erweitern.+Einige Worte mit einem speziellen //Immediate//-Flag werden im Compilermodus nicht kompiliert sondern statt dessen ausgeführt. Diese Immediate-Worte sind Compiler-Hilfsworte, die dem Aufbau spezieller Sprachkonstrukte dienen. Ein ''IF'' kompiliert z. B. eine entsprechende Sprungstruktur in das neue Wort. Das abschließende ''THEN'' (in älteren Dialekten manchmal ''ENDIF'') kann dann auf eine korrekte Verschachtelung prüfen und Sprungziele auflösen. Ein weiteres Immediate-Wort ist das ; welches die Definition beendet und das System zurück in den Interpretermodus versetzt. Da der Programmierer selbst Immediate-Worte schreiben kann, hat er damit die Möglichkeit auch den Compiler selbst zu erweitern.
  
 Eine weitere Besonderheit sind Definitionsworte, die zur Erzeugung von Datenstrukturen verwendet werden. Sie kombinieren einen ''CREATE''-Teil, in dem alle Aktionen beschrieben werden, die zum Anlegen der neuen Datenstruktur erforderlich sind (Reservierung von Speicher, Initialisierung, ...) mit einem ''DOES>''-Teil, in dem das Laufzeitverhalten der aller mit diesem Wort erzeugten Datenstrukturen beschrieben werden kann. Eine weitere Besonderheit sind Definitionsworte, die zur Erzeugung von Datenstrukturen verwendet werden. Sie kombinieren einen ''CREATE''-Teil, in dem alle Aktionen beschrieben werden, die zum Anlegen der neuen Datenstruktur erforderlich sind (Reservierung von Speicher, Initialisierung, ...) mit einem ''DOES>''-Teil, in dem das Laufzeitverhalten der aller mit diesem Wort erzeugten Datenstrukturen beschrieben werden kann.
infos/wasistforth.1494546085.txt.gz · Zuletzt geändert: 2017-05-12 01:41 von mka