English version: Minimal word set (PDF)
Minimal Word Set
Wie viele Primitives braucht ein Forth, um es daran hochzuziehen? Erstaunlich wenige, wie man an Gforth EC sieht, das für fast jedes Primitiv eine High-Level-Definition bereitstellt. Aber Vorsicht! Wer zuviel weglässt, riskiert Zirkelschlüsse (Endlosschleifen).
Wir brauchen auf alle Fälle:
:dodoes
als generalisierten Einstiegspunkt für alle High-Level-Definitionen, oder call
für primitive-centric Implementierungen. @
und !
um auf den Speicher zuzugreifen. >R
und R>
damit auch auf dem Return-Stack etwas bewegt werden kann. +
oder 2*
für die Artihmetik. Und NAND
als universellen Bit-Befehl.
?BRANCH
oder 0=
für Verzweigungen. Und schließlich ;S
und EXECUTE
für die Ausführung.
Alles andere lässt sich aus diesen Wörtern definieren, auch wenn man dafür dann temporäre Variablen braucht:
: lit' r> @ ; : cell lit' [ 2 , ] ; \ oder 4 oder 8 ... : tmp1 lit' [ here cell+ , 0 , ] ; : dup tmp1 ! tmp1 @ tmp1 @ ; : lit r> dup cell + >r @ ;