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 @ ;