C--: a portable assembly language that supports garbage collection (Abstract)

Simon Peyton Jones, Norman Ramsey, and Fermin Reig

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.