LISP and Symbolic Computation, 2(2)153-162
Runtime Tags Aren't Necessary
Andrew W. Appel, Princeton University, Computer Science Department, Olden and William Streets, Princeton, New Jersey 08544
Abstract: Many modern programming environments use tag bits at
runtime to distinguish objects of different types. This is
particularly common in systems with garbage collection, since the
garbage collector must be able to distinguish pointers from
non-pointers, and to learn the length of records pointed to.
The use of tag bits leads to inefficiency. In addition to the obvious
space overhead (tag bits and record descriptors occupy memory space),
there is a time overhead: tag bits must be stripped off of data before
arithmetic operations are performed, and re-attached to the data when
it is stored into memory. This takes either extra instructions at
runtime, or special tag-handling hardware, or both.
This paper shows how the use of tag bits, record descriptor words,
explicit type parameters, and the like can be avoided in languages
(like ML) with static polymorphic typechecking. Though a form of tag
will still be required for user-defined variant records, all other
type information can be encoded once--in the program--rather than
replicated many times in the data. This can lead to savings both in
space and time.
|
[local copy]
|
|