C--: a portable assembly language that supports garbage collection
        Simon Peyton Jones, Microsoft Research, Cambridge

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.

Details at http://www.cminusminus.org