C--: a portable assembly language that supports garbage collection
(Abstract)
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),
PostScript (407K),
and
PDF (104K).
Readers may also be interested in
Machine-independent support for
garbage collection, debugging, exception handling, and
concurrency.
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
C-- page.