English version: {{ :words:kernel_embedded:bernd_paysan_min_forth_english.pdf |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 @ ;