English version: Minimal word set (PDF)
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 @ ;