Every object in libscheme
is an instance of the C structure
Scheme_Object
. Each instance of Scheme_Object
contains
a pointer to a type object (that also happens to be a
Scheme_Object
) and two data words. If an object requires more
than two words of storage or if the object is some other type of
foreign C structure, it is stored in a separate memory location and
pointed to by the ptr_val
field. The actual definition of
Scheme_Object
appears in figure 6.
Figure: The definition of Scheme_Object
While many Scheme implementations choose to represent certain special
objects as immediate values (e.g., small integers, characters, the
empty list, etc.) this approach was not used in libscheme
because the ``everything is an object with a tag approach'' is simpler
and easier to debug. A side effect of this decision is that
libscheme
code that does heavy small integer arithmetic will
allocate garbage that must be collected, in contrast to higher
performance Scheme implementations that only dynamically allocate very
large integers.