C语言本身是用什么语言写的?
星球人的一个提问:“C语言本身用什么语言写的?”
答:
是用C语言编写的。
这里有一个概念,就是编程语言的自举。
自举(bootstrapping)字面理解就是自己能把自己给举起来,换做编程语言来讲就是,自己编译自己。也就是C语言能通过C语言自己编写自己的编译器。
完成自举通常需要3-4个步骤。
1、创建自举编译器环境。
2、编译自举编译器。
3、通过自举编译器编译完整的编译器。
4、通过第三步里面的完整的编译器编译完整的编译器。
第四步得到的编译器就是一个自举编译器。
那么问题来了,第2步中的编译器是什么语言写的呢,是这么来的呢?
这个就要了解编程语言是什么了,简单而言编程语言分为,机器语言(就是0101),汇编语言(可以理解为机器语言简单英文翻译),高级语言(这个就是我们通常接触到的编程语言了,细分的话,还有编译型的语言和解析型的语言等)。
参考 Dennis M. Ritchie 写的 The Development of the C Language:Chistory。
Ken Thomson 不满意 BCPL,于是设计了 B 语言,并且用 BCPL 为 B 语言写了一个编译器,然后从这个编译器开始自举写新的 B 语言编译器。
贝尔实验室的众人在 PDP-7 上用 B 语言写了各种各样的东西后又不满意 B 语言了,于是 1971 年 DMR 开始在新买的 PDP-11 上用 B 给 B 写扩展,称之为 new B(简称NB),new B和原来的B语言渐行渐远,于是就取了BCPL的第二个字母C当作new B的新名字,C语言就这么诞生了。
1973 年夏天他们用手头的编译器和语言给 PDP-11 重写了一个 Unix Kernel。C语言就这样和unix/linux结下不解之缘。
对了,BCPL也是一门能自举的语言,后来有些人也用汇编语言写了C语言的编译器,并且C语言的语法都是透明公开的,你可以用任何语言实现C语言的编译器。
所以答案就变成了,第一版C语言编译器是由B语言编写的。现在你可以用任何语言去实现C语言的编译器。