**This is an old revision of the document!**
Minimal Word Set
How many primitives does a Forth need to get it started?
Surprisingly few, as you can see with Gforth EC, which provides a high-level definition for almost every primitive. But beware! If you omit too much, you risk circular behaviour (loops).
We need in any case:
:dodoes
as generalized entry point for all high-level definitions, or
Call
for primitive-centric implementations. @
and !
to access the memory. >R
and R>
for the return stack, so anything can be moved. +
or 2*
for Artihmetik. And NAND
as a universal bit instruction. ?BRANCH
or 0=
for branches. And finally ;S
and EXECUTE
for execution.
Everything else can be defined from these words, even if it then needs temporary variables:
: lit' r> @ ; : cell lit' [ 2 , ] ; \ oder 4 oder 8 ... : tmp1 lit' [ here cell+ , 0 , ] ; : dup tmp1 ! tmp1 @ tmp1 @ ; : lit r> dup cell + >r @ ;
By Bernd Paysan, Translation Juergen Pintaske 20151121