Christopher B. Browne's Home Page
cbbrowne@acm.org

2. The C Family

The C Programming Language was introduced by Kernighan and Ritchie of Unix fame; it was based on the "typeless" language, BCPL .

Brad Cox introduced Objective C, layering the object model as well as some of the syntax of Smalltalk on top of C. It is quite unfortunate that this never grew to popularity, as it is an easy to understand model compared to the rather more byzantine C++.

Bjarne Stroustrup created C++, which combined the facilities of C with the "class-oriented" concepts of Simula.

2.1. GCC

GCC is by far the most commonly-used C compiler in the world of Unix; it supports many platforms surprisingly well, and indeed supports an increasing number of languages (classical C, ANSI C, C++, Objective-C, Ada, Pascal, FORTRAN, and others...)

A recent development project related to GCC was called EGCS. Its goal was to fold together a number of independent "hacks" taking place on GCC. Unfortunately, the FSF's needs for GCC were somewhat at odds with the desires of others that have done quite a bit of "hacking" on GCC over the years. As the "GNU System's Compiler," stability was paramount, and the FSF had been reluctant to add various external code to the "GCC2 Tree."

This included such things as:

The reluctance of the GCC maintainers to allow these changes in had the unfortunate result that these were all being maintained as separate "forked sets of hacks."

EGCS was opened up as a project to try to join many of these changes together into a single "experimental" code stream, to ultimately become the "next GCC." This approach was adequately successful, and EGCS is now GCC.

A set of GCC 3.0 Release Criteria is now pretty ancient and obsolete...

2.2. LCC

lcc, a Retargetable Compiler for ANSI C is notable for the characteristic that it was written using noweb, a Literate Programming tool.

This compiler is considerably smaller and faster than GCC. It does not support as many platforms, and does not provide as sophisticated optimization strategies. On the other hand, it is far more approachable in source code form, and is probably a lot easier to understand.

2.3. ANDF/TenDRA

This project was originally sponsored by the Open Software Foundation, now Open Group, and sought to create tools to manipulate software in ANDF - Architecture Neutral Distribution Format.

The intent was to be able to compile software in various languages including C, C++, and Ada95, producing "object code" in the ANDF format, which would then be turned into machine-specific executables on the target host.

Vendors could produce programs in ANDF form, and they should "just run" on any of the target platforms. A local installer application would transform ANDF inputs to produce target-specific forms.

The main available result of the efforts is the TenDRA C/C++ Compiler set using ANDF. Compilers for Ada95, Dylan, and possibly other languages, were created, but are not publicly available.

The ANDF approach is not unlike the way GCC uses RTL , except that with GCC, RTL is used as an internal step in the compilation process, and is not intended to be useful as a "code distribution" form. Notably, the GCC RTL form winds up being quite platform-specific, whereas ANDF is a platform-independent distribution form.

Apparently, "The project ended somewhat acrimoniously in April 1998;" for all intents and purposes, TenDRA development "died." In 2002, some interest has re-emerged.

Supported platforms have included:

It seems unfortunate to me that this fell so badly by the wayside; the availability of a compiler suite with a fairly substantially different model from GCC would seem likely to offer three significant merits:

2.4. Other C Implementations

2.5. Other General C Links and Tools

2.6. C++

2.7. Objective C

Objective C was designed by Brad Cox, and adds object-oriented "extensions" to C. It is considered to be simpler to learn than C++. Objective C is the language used to implement NeXTStep, and is the "language of choice" for use with OpenStep and GNUStep.

GCC has a "front end" for Objective C that was developed by NeXT.

Another description is that Objective-C is a cross between Smalltalk and C. As a true superset of C it is ideal for putting object wrappers on existing C libraries.

2.7.1. Other C-Like Languages

2.8. BCPL

Before C, there was BCPL.

2.9. Other C/C++/ObjectiveC stuff

2.10. The Go Language

2.11. Rust

The Rust language is a would-be successor to C++ as a "systems implementation language."

It has a number of interesting aspects:

Google
Contact me at cbbrowne@acm.org