complexity problems that he had seen on Multics. After a brief and unsuccessful flirtation with
Fortran, Thompson created the language B by simplifying the research language BCPL [2] so its
interpreter would fit in the PDP-7's 8K word memory. B was never really successful; the hardware
memory limits only provided room for an interpreter, not a compiler. The resulting slow performance
prevented B from being used for systems programming of UNIX itself.
[1] The difficulties involved in learning, using, and implementing PL/I led one programmer to pen this verse:
IBM had a PL/I / Its syntax worse than JOSS / And everywhere this language went / It was a total loss.
JOSS was an earlier language, also not noted for simplicity.
[2] "BCPL: A Tool for Compiler Writing and System Programming," Martin Richards, Proc. AFIPS Spring Joint
Computer Conference, 34 (1969), pp. 557-566. BCPL is not an acronym for the "Before C Programming
Language", though the name is a happy coincidence. It is the "Basic Combined Programming Lan-guage"—
"basic" in the sense of "no frills"—and it was developed by a combined effort of researchers at London
University and Cambridge University in England. A BCPL implementation was available on Multics.
B simplified BCPL by omitting some features (such as nested procedures and some loop-ing
constructs) and carried forward the idea that array references should "decompose" into pointer-plusoffset
references. B also retained the typelessness of BCPL; the only operand was a machine word.
Thompson conceived the ++ and -- operators and added them to the B compiler on the PDP-7. The
popular and captivating belief that they're in C because the PDP-11 featured corresponding autoincrement/
decrement addressing modes is wrong! Auto increment and decrement predate the PDP-11
hardware, though it is true that the C statement to copy a character in a string:
*p++ = *s++;
can be compiled particularly efficiently into the PDP-11 code:
movb (r0)+,(r1)+
leading some people to wrongly conclude that the former was created especially for the latter.
A typeless language proved to be unworkable when development switched in 1970 to the newly
introduced PDP-11. This processor featured hardware support for datatypes of several different sizes,
and the B language had no way to express this. Performance was also a problem, leading Thompson to
reimplement the OS in PDP-11 assembler rather than B. Dennis Ritchie capitalized on the more
powerful PDP-11 to create "New B," which solved both problems, multiple datatypes, and
performance. "New B"—the name quickly evolved to "C"—was compiled rather than interpreted, and
it introduced a type system, with each variable described in advance of use.
Early Experiences with C
The type system was added primarily to help the compiler-writer distinguish floats, doubles, and
characters from words on the new PDP-11 hardware. This contrasts with languages like Pascal, where
the purpose of the type system is to protect the programmer by restricting the valid operations on a
Fortran, Thompson created the language B by simplifying the research language BCPL [2] so its
interpreter would fit in the PDP-7's 8K word memory. B was never really successful; the hardware
memory limits only provided room for an interpreter, not a compiler. The resulting slow performance
prevented B from being used for systems programming of UNIX itself.
[1] The difficulties involved in learning, using, and implementing PL/I led one programmer to pen this verse:
IBM had a PL/I / Its syntax worse than JOSS / And everywhere this language went / It was a total loss.
JOSS was an earlier language, also not noted for simplicity.
[2] "BCPL: A Tool for Compiler Writing and System Programming," Martin Richards, Proc. AFIPS Spring Joint
Computer Conference, 34 (1969), pp. 557-566. BCPL is not an acronym for the "Before C Programming
Language", though the name is a happy coincidence. It is the "Basic Combined Programming Lan-guage"—
"basic" in the sense of "no frills"—and it was developed by a combined effort of researchers at London
University and Cambridge University in England. A BCPL implementation was available on Multics.
B simplified BCPL by omitting some features (such as nested procedures and some loop-ing
constructs) and carried forward the idea that array references should "decompose" into pointer-plusoffset
references. B also retained the typelessness of BCPL; the only operand was a machine word.
Thompson conceived the ++ and -- operators and added them to the B compiler on the PDP-7. The
popular and captivating belief that they're in C because the PDP-11 featured corresponding autoincrement/
decrement addressing modes is wrong! Auto increment and decrement predate the PDP-11
hardware, though it is true that the C statement to copy a character in a string:
*p++ = *s++;
can be compiled particularly efficiently into the PDP-11 code:
movb (r0)+,(r1)+
leading some people to wrongly conclude that the former was created especially for the latter.
A typeless language proved to be unworkable when development switched in 1970 to the newly
introduced PDP-11. This processor featured hardware support for datatypes of several different sizes,
and the B language had no way to express this. Performance was also a problem, leading Thompson to
reimplement the OS in PDP-11 assembler rather than B. Dennis Ritchie capitalized on the more
powerful PDP-11 to create "New B," which solved both problems, multiple datatypes, and
performance. "New B"—the name quickly evolved to "C"—was compiled rather than interpreted, and
it introduced a type system, with each variable described in advance of use.
Early Experiences with C
The type system was added primarily to help the compiler-writer distinguish floats, doubles, and
characters from words on the new PDP-11 hardware. This contrasts with languages like Pascal, where
the purpose of the type system is to protect the programmer by restricting the valid operations on a