``A new perspective on programming-language infrastructure''
Welcome to C--
Suppose you are writing a compiler; how will you get quality
machine code? You might write your own code
generator---but that's a lot
of work. You might use somebody else's: perhaps
VPO, MLRISC,
or the gcc
back end. But each of these impressive systems has a rich, complex,
and ill-documented interface, and furthermore, to
use MLRISC you must write your front end in ML, to use
gcc you must write it in C, and so on.
You might generate C, if you can live without multiple
results in registers, proper tail calls,
computed gotos, accurate garbage collection, and efficient
exceptions.
You would be much happier
with one portable assembly language that
could be generated by a front end and implemented by any of several
code generators. Such a language should serve as the
interface between high-level compilers and
retargetable, optimizing code generators.
Authors of front ends and authors of code generators could cooperate easily.
C-- is that
language.
What distinguishes C--
The following aspects of C-- distinguish it from other compiler infrastructures:
- Other infrastructures focus on adding new optimizations;
C-- focuses on supporting
multiple front ends for multiple languages.
- C-- has a machine-level type system,
so you don't have to shoehorn your favorite high-level language into a
high-level data model that doesn't fit.
- C-- provides a run-time interface, so you can implement
garbage collection and exception handling using the techniques that
are best suited to your language.
The run-time interface is the most novel and most
distinguishing feature of C--.
Where to go from here
To experiment with the language, download Quick C--, which
includes an interpreter and a native-code compiler.
You'll also want the specification (in DVI,
PostScript, or PDF forms).
The compiler's release notes are part of the source distribution in doc/release.ps.
For an overview of the design, consult our papers, which present an evolving view of C--.
Please write front ends that emit C-- or
comment on our design.
If you're interested, please join the mailing list.
Research on C-- and Quick C-- is supported by a generous
gift from Microsoft
Research and by the National Science Foundation
under grant number 0325460.
(Opinions, findings, and conclusions or recommendations expressed
in this material are those of the author(s) and do not necessarily
reflect the views of the National Science Foundation.)
The results of our research may be used freely by
anyone for any purpose.
Contact: C-- Webmaster.
URL: http://www.cminusminus.org/.
Last edited: Sat 11 Oct 2008 16:57 EDT.