Standards
Remarkably, C achieved its success in the absence of a formal
standard. Even more remarkable is that during this period of increasingly
widespread use, there has never been any serious divergence of C into the
number of dialects that has been the bane of, for example, BASIC. In fact,
this is not so surprising. There has always been a “language reference
manual”, the widely-known book written by Brian Kernighan and Dennis
Ritchie, usually referred to as simply “K&R”.
The C Programming Language,
B.W. Kernighan and D. M. Ritchie,
Prentice-Hall
Englewood Cliffs,
New Jersey,
1978
Further acting as a rigorous check on the expansion into numerous
dialects, on UNIX systems there was only ever really one compiler for C;
the so-called “Portable C Compiler”, originally written by
Steve Johnson. This acted as a reference implementation for C—if
the K&R reference was a bit obscure then the behaviour of the UNIX
compiler was taken as the definition of the language.
Despite this almost ideal situation (a reference manual and a reference
implementation are extremely good ways of achieving stability at a very low
cost), the increasing number of alternative implementations of C to be
found in the PC world did begin to threaten the stability of the
language.
The X3J11 committee of the American National Standards Institute started
work in the early 1980's to produce a formal standard for C. The committee
took as its reference the K&R definition and began its lengthy and
painstaking work. The job was to try to eliminate ambiguities, to define
the undefined, to fix the most annoying deficiencies of the language and to
preserve the spirit of C—all this as well as providing as much
compatibility with existing practice as was possible. Fortunately, nearly
all of the developers of the competing versions of C were represented on
the committee, which in itself acted as a strong force for convergence
right from the beginning.
Development of the Standard took a long time, as standards often do. Much
of the work is not just technical, although that is a very time-consuming
part of the job, but also procedural. It's easy to underrate the procedural
aspects of standards work, as if it somehow dilutes the purity of the
technical work, but in fact it is equally important. A standard that has no
agreement or consensus in the industry is unlikely to be widely adopted and
could be useless or even damaging. The painstaking work of obtaining
consensus among committee members is critical to the success of a practical
standard, even if at times it means compromising on technical
“perfection”, whatever that might be. It is a democratic
process, open to all, which occasionally results in aberrations just as
much as can excessive indulgence by technical purists, and unfortunately
the delivery date of the Standard was affected at the last moment by
procedural, rather than technical issues. The technical work was completed
by December 1988, but it took a further year to resolve procedural
objections. Finally, approval to release the document as a formal American
National Standard was given on December 7th, 1989.
|
Printer-friendly version
The C Book
This book is published as a matter of historical interest.
Please read the
copyright and disclaimer information.
GBdirect Ltd provides up-to-date training and consultancy in
C,
Embedded C,
C++
and a wide range of
other subjects based on
open standards if you happen to be interested.
|