C--: a portable assembly language that supports garbage collection
For a compiler writer, generating good machine code for a variety of
platforms is hard work. One might try to reuse a retargetable code
generator, but code generators are complex and
difficult to use, and they limit one's choice of implementation
language. One might try to use C as a portable assembly language, but
C limits the compiler writer's flexibility and the performance of the
resulting code. The wide use of C, despite these drawbacks, argues
for a portable assembly language. C-- is a new language designed
expressly for this purpose.
The use of a portable assembly language introduces new problems in
the support of such high-level run-time services as garbage
collection, exception handling, concurrency, profiling, and debugging.
We address these problems by combining the C-- language with a
C-- run-time interface.
The combination is designed to allow the compiler writer a choice of
source-language semantics and implementation techniques, while still
providing good performance.
This paper is available in
TeX DVI format (101K),
Readers may also be interested in
Machine-independent support for
garbage collection, debugging, exception handling, and
This older report covers substantially the same material, but it goes into much
greater detail about other high-level services, and it presents the
complete interface to the C-- run-time system.
It does not, however, represent our latest thinking on the topic,
which can be found in
Exceptions Need Not Be Exceptional.
Other related work appears on the