By combining existing type systems with standard type-based compilation tec
hniques, we describe how to write strongly typed programs that include a fu
nction that acts as a tracing garbage collector for the program. Since the
garbage collector is an explicit function, we do not need to provide a trus
ted garbage collector as a runtime service to manage memory.
Since our language is strongly typed, the standard type soundness guarantee
"Well typed programs do not go wrong" is extended to include the collector
. Our type safety guarantee is non-trivial since not only does it guarantee
the type safety of the garbage collector, but it guarantees that the colle
ctor preservers the type safety of the program being garbage collected. We
describe the technique in detail and report performance measurements for a
few microbenchmarks as well as sketch the proofs of type soundness for our
system.