
\section{Warum gibt es die Kopf-- und Code--Abschnitte in Forth?}

In comp.lang.forth löste Helmut Giese neulich einen interessanten Austausch über Forthsysteme aus, die abschnittsweise angelegt sind. Er fragte nach dem Sinn von Kopf-- und Codeabschnitten [1]. Es wurden dort etliche Möglichkeiten der Aufteilung je nach Problemstellung aufgezeigt, also nicht nur diese beiden Abschnitte.

Darüber hinaus hat mich die Bemerkung von John Passaniti angesprochen, dass es sicherlich Gelegenheiten gäbe, in denen auch der Compiler aus der Application entfernt werden muss, er aber selbst dann gerne einen minimalen Lademechanismus darin belässt, mit dem Code in das ansonsten abgeschlossene System nachgeschoben und ausgeführt werden kann. Bis hin zu einem vollständigen Forth. Er erwähnte dabei das \emph{Drei--Instruktionen--Forth} (The \emph{three instruction Forth} idea). Damit meinen viele wohl die Funktionen: Lade den Speicher, lese den Speicher, rufe eine Routine auf.

Bernd Paysan wies darüber hinaus auf eine andere Möglichkeit hin, die \emph{forthiger} ist und mal von Egmont Woitzel veröffentlich wurde. Dabei werden die drei Instruktionen

\texttt{2KEYS KOMMA EXECUTE} 

als Lader vorgesehen. \texttt{2KEYS} liest ein 16bit Wort von der seriellen Schnittstelle (weil die Embedded--Controller gewöhnlich 16--Bitter sind), \texttt{KOMMA} kompiliert sie ins Wörterbuch, und \texttt{EXECUTE} führt ein Wort aus. \texttt{EXECUTE} ist dabei implizit angelegt, weil der Monitor (serial handler) nur aus der Schleife

\texttt{BEGIN 2KEYS EXECUTE AGAIN}

besteht. Diese Worte benutzen alle die Stacks. Und dann ist \texttt{@} (fetch) gewöhnlich das erste Wort, welches mit dem Lader erzeugt wird. Um einen 16--Bit-- Wert in das Verzeichnis zu kompilieren, sendet man dann

\begin{verbatim}
<2keys> <literal> <,> 
\end{verbatim}

über den Draht. mk


[1] comp.lang.forth vom  09.01.2010: Why are there 2 sections: code and header?
