

A revised manual was posted in HTML form in May 1999.

The first version of C- was released in April 1998 as a MSRA paper, accompanied by a January 1999 paper on garbage collection. Its most innovative feature is a run-time interface which allows writing of portable garbage collectors, exception handling systems and other run-time features which work with any C- compiler. C- is a tightly-defined simpler alternative to C which supports all of these. However, C is a poor choice for functional languages: it does not guarantee tail-call optimization, or support accurate garbage collection or efficient exception handling.

Since writing a custom code generator is a challenge in itself, and the compiler backends available to researchers at that time were complex and poorly documented, several projects had written compilers which generated C code (for instance, the original Modula-3 compiler).

(in C, - and ++ mean "decrement" and "increment," respectively.) The name of the language is an in-joke, indicating that C- is a reduced form of C, in the same way that C++ is basically an expanded form of C. The language's syntax borrows heavily from C while omitting or changing standard C features such as variadic functions, pointer syntax, and aspects of C's type system, because they hamper essential features of C- and ease of code-generation. This is done by delegating low-level code-generation and program optimization to a C- compiler.
