震惊!你知道编程语言之祖 C 语 言,自身是用什么语言写的吗?
C语言在运行之前得编译才行,C语言额编译器从哪里来?
机器语言可以直接被CPU执行,不需要编译器。
汇编语言只是机器语言的助记符,但它依旧需要编译成机器语言才能执行。
所以只能用机器语言来写第一个编译器,以后就不用了。
用汇编语言去写C语言的编译器,然后可以编译任意的C语言程序了。然后用C语言本身写一个编译器,接下来就可以把用汇编写的C语言编译器抛弃了。
如果C语言之前已经出些了别的高级语言,比如pascal,然后就可以用pascal来写一个C语言额编译器了。
第一个Pascal的编译器据说使用fortan写的。第一个高级语言的Fortan的编译器应该是汇编语言写的。
在开发第一代unix的时候,连C语言都没有KenThompson和DennisRitchie可是用汇编一行行把Unix敲出来的。
WPS第一版是求伯君用汇编写出来的。
Turbo Pascal的编译器也是Anders用汇编写出来的、
对于编译器,还可用“滚雪球”的方式来开发:
以C语言为例,第一个版本可以先选择C语言的一个子集,例如只支持基本的数据类型,流程控制语,句函数调用.......我们把这个子集称为C0,然后用汇编语言写个编译器。只搞定这个语言的子集C0,这样写起来就容易不少了。C0这个子集可以工作了,然后我们扩展这个子集,例如添加struct指针......把新的语言称为C1,那C1这个语言的编译器由谁来写呢?自然是C0,等到C1可以工作了,再次扩展语言特性,用C1写编译器,得到C2,然后是C3,C4.......最后得到完整的C语言,这个过程被称为bootstraping,中文叫做自举。

