ir230@sdcc6.ucsd.edu (john wavrik) (12/12/90)
FORTH vs FIFTH
Somewhere along the way I acquired a copy of FIFTH and a recent
posting asking about the differences of Forth and Fifth led me to pull
it out and try a few things. The first thing I tried exposed a
difference -- there is a difference in the dictionary structure. Fifth
does not handle redefinition in the way Forth does (in my copy it
produces an endless loop).
The Forth dictionary is a linked list (the fact that it is threaded
in some versions of Forth only has the effect of preventing us from
changing links to influence search order). A noticeable and useful
feature of this data structure is the ability to redefine words. In
Forth self-reference deliberately does not produce recursion -- but
instead it produces redefinition.
Some of the systems that I (and others) write are modular. Certain
capabilities are coded (and loaded) separately. A complete working
system is produced by loading desired components. A working system
may be thought of as a leaf of a tree -- certain alternate components
have been selected for loading at each stage. A consequence of this
method for building systems is that capabilities may exist in a
partial system that must be extended (in potentially several different
ways) when higher level components are loaded.
A simple example is the word RESET. I use RESET generically -- it
means to restore the entire system (whatever it happens to be at the
time) to a known initial state. RESET may relink linked lists, set
system variables to initial values, etc. Each module of the system has
a definition:
: RESET RESET <...initialization for current module....> ;
Thus, as the system is extended, the meaning of RESET is appropriately
extended IN A TRANSPARENT WAY. I never need to know, when coding, what
is involved in RESETting the earlier parts of the system -- and I
never need to know explicitly what has been loaded. Whatever it is,
RESET resets it!
More complicated examples are generated by the compounding of data
types. Mathematics abounds in compound data types which are obtained
from simpler data types -- we may have matrices whose entries are
polynomials with integer coefficients; or polynomials whose
coefficients are matrices with rational entries; or matrices whose
entries are matrices with integer entries; or ..... These can be
handled in Forth by a modular construction in which redefinition is
used to link the modules.
Dealing with modular construction of this sort is by no means trivial
in most languages. The fact that it can be done so well in Forth is a
tribute to the linked list structure of the Forth dictionary and the
barrier against recursive self-reference.
John J Wavrik
jjwavrik@ucsd.edu Dept of Math C-012
Univ of Calif - San Diego
La Jolla, CA 92093