26

When we say that "Dennis Ritchie developed C language", do we mean that he has created a compiler (using an 'already' developed other language) which can compile the source code written in C language? if yes, what was language he used to write first C compiler? I understand a compiler is a program and we can create another compiler for C language using presently available C compiler. Is that correct?

0

5 Answers 5

24

From wiki:

Ritchie is best known as the creator of the C programming language and a key developer of the Unix operating system, and as co-author of the definitive book on C.

Also from wiki:

The first C compiler written by Dennis Ritchie used a recursive descent parser, incorporated specific knowledge about the PDP-11, and relied on an optional machine-specific optimizer to improve the assembly language code it generated.

The first C compiler was also written by him, in assembly.

This page from bell-labs answers most of your questions.

7
  • First link is broken. Commented May 16, 2011 at 16:39
  • IIRC, C was based on an earlier language called B, and Unix was based on an earlier operating system called Multics. It would be an obvious guess that these were used to bootstrap development - but from what I've read, that's a wrong guess. The early development of Unix was in assembler, until C took over, for example.
    – user8709
    Commented May 16, 2011 at 17:43
  • 2
    IIRC, B was a stripped-down version of BCPL, which was an early systems programming language. I think a lot of the early Unix work was described using B, but I'm not sure there was ever an actual Unix compiler for it (possibly a cross-compiler that ran on something else).
    – TMN
    Commented May 16, 2011 at 19:20
  • Ouch . . . writing a compiler in assembly language.
    – compman
    Commented Sep 11, 2011 at 2:44
  • 7
    @compman At some point, someone has to write a compiler in assembly - how else do you bootstrap your way to a compiler in a HLL? Commented Oct 13, 2011 at 10:24
10

Check this out for a history lesson: http://www.livinginternet.com/i/iw_unix_c.htm

When the PDP-11 computer arrived at Bell Labs, Dennis Ritchie built on B to create a new language called C which inherited Thompson's taste for concise syntax, and had a powerful mix of high-level functionality and the detailed features required to program an operating system. Most of the components of Unix were eventually rewritten in C, culminating with the kernel itself in 1973

Also this might be interesting: http://cm.bell-labs.com/cm/cs/who/dmr/chist.html

1
  • 1
    AFAIK, "built on" as in "design based on design of", not as "compiled using".
    – vartec
    Commented May 16, 2011 at 17:11
10

Dennis Ritchie used bootstrapping. Bootstrapping is simple idea, where you develop initial, simple compiler in assembly, then you use this simple compiler to compile your fully fledged compiler written in (a subset of) your target language. This is how Ritchie created very early last1120c compiler.

0
2

This article should answer your question:

http://www.faqs.org/docs/artu/c_evolution.html

The history of C is bound to the B language, for which Ken Thompson developed an interpreter. Ritchie used it for the very first stages of C development.

2

C was designed to allow to port Unix to other platforms without having to rewrite all the assembly code for the new platform.

Hence the common saying that "C is portable assembler". This reflects that C is intentionally very close to a CPU (from around 1970) in abstraction level and is also the reason that most embedded software is written in some kind of C.

So, C is intimately connected with Unix, and the Unix folks wrote the first C compiler based on earlier work to do what they needed.

Please note that Kernigan and Richie wrote an excellent book on C which is probably one of the most influential reference works on a computer language, since it was so clear and concise that most readers could learn advanced subjects like pointers and recursion from it.

Not the answer you're looking for? Browse other questions tagged or ask your own question.