
\chapter{Introduction}

This memo is an outgrowth of a workshop on the Id compiler held during
the winter of 1991. The Id compiler has grown considerably since its
first incarnation and documentation has not kept pace. At the time of
the workshop, some essential features of the compiler were documented
only in the source code, or not at all. Though we heartily agree that
source level comments are essential for the compiler's maintenance and
modification, they are no substitute for a general introduction to
help novice compiler hackers navigate their way through the code.
Before writing this memo, its authors were unfamiliar with the
specific features of the Id compiler they documented. It was our
intention to both document and demystify the code as much for our own
benefit as for others. In the process, we've surely made mistakes and
omitted some details but we hope we've provided a helpful introduction
to the Id compiler for other programmers. Please note that the
compiler is a rapidly moving target and features may have been added,
removed or reorganized from what's described within.  We don't intend
to keep this memo up to date with the latest and greatest changes, but
hopefully future compiler hackers will feel compelled to update relevant sections
for posterity.

It was our original intention to document the three phases of the compiler
and the top-level ``glue'' that binds it together. However, manpower
constaints have forced us to restrict ourselves to only the implementation
independent front and middle ends. The reader interested in a description of a
back end for an ETS dataflow machine is referred to Jamey Hick's memo \cite{Hicks90}

The reader is advised to have a copy of the DFCS documentation 
\cite{DFCS} handy while reading since we make frequent references to tools
and structures described in it.  A working knowledge of Common Lisp
\cite{Steele90} is essential to understand the compiler's code. Also,
Ken Traub's master's thesis \cite{Traub86} describing an initial
version of the compiler might be read in parallel with this document.

We'd like to thank the compiler hacker's of CSG for giving presentations
at the workshop and explaining things in general, including, Ken Traub,
Jamey Hicks, Shail Adityah Gupta, Paul Barth and Andy Shaw. We'd also
like to thank Christine Flood for helpful comments.
