Benutzer-Werkzeuge

Webseiten-Werkzeuge


words:kernel_embedded:minimum_word_set

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 @ ;
words/kernel_embedded/minimum_word_set.txt · Zuletzt geändert: 2016-09-13 17:02 von mka