Inner Interpreter

Die zentrale Stelle in einem Forth-System ist der INNER INTERPRETER. Die Idee ist simpel: Forth interpretiert einfach nur ein Sprungziel als: „This comes next!“ und führt den so bezeichneten Code da aus wo er steht. Symbolisch ausgedrückt:

FOREVER: INVOKE IP++

Der Prozess läuft so ab: Der Instruction Pointer IP zeigt auf eine Adresse an der ausführbarer Code steht. Das System springt dort hin und führt den Code dort aus. Dann kehrt Forth zurück und macht das selbe noch mal.

Dieser endlose Prozess wird in Forthsystemen oft NEXT genannt. Next inkrementiert in aller Regel beim Sprung noch seinen IP - und wird damit zum „inner interpreter“ weil es so selbst die Antwort gibt auf das „what comes next?“

So kann eine Reihung von Sprungzielen abgearbeitet werden - threaded code. IP kann natürlich auch vom Programm selbst verändert werden, wodurch Verzweigungen entstehen.

Anmerkung

Der Ausdruck FOREVER: INVOKE IP++ entstammt keiner bestimmten Programmiersprache, sondern symbolisiert, was da geschieht. Der Term FOREVER zeigt an, dass der Prozess sich ewig wiederholt, und das ++ steht für ein Postinkrement, also die Erhöhung des Zählers IP nachdem dieser für den Sprung zum ausführbaren Programmteil übernommen wurde.

Damit ist Forth eigentlich nicht viel anders als jeder Prozessor selbst. Denn da wird ja auch einfach der Prozesszähler PC inkrementiert. Also könnte man genausogut FOREVER: INVOKE PC++ schreiben um die Funktion des Prozessor selbst zu beschreiben. Forth wird daher auch virtuelle Maschine genannt. Im Gegensatz zur darunterliegenden Hardware mit ihrem festen Satz an einfachen Operationen, lassen sich in der darauf aufgesetzten virtuellen Maschine beliebig viele neue Operationen schaffen, die words des Forth.

So werden in einem Forth-System bewährte grundlegende Worte versammelt, die primitives des Forth, aus denen wiederum ein kernel zusammengestellt wird, von dem aus man dann eigene forth definitions machen kann. Es gibt etliche Bestrebungen, die primitives des Forth als Hardware auszulegen.

Ich danke Ulrich Hoffmann für die anregende Diskussion.