第一次听说C语言编译器是用C语言写的时候,很多人觉得难以理解。C语言编译器怎么能够用C语言写呢?鸡都没有,如何生蛋呢?蛋没有,如何孵化出鸡呢?
实际上有种技术叫做bootstrapping,翻译过来叫做自举。什么意思呢?
比如最早要实现C语言编译器,肯定不能用C语言写,因为没有可用的C语言编译器。
这个时候就可以用汇编语言写一个简易的C语言编译器C0,它是可执行程序,语法上只能部分支持C语言。但是没有关系,这个时候就可以写C语言程序了,在C0支持的有限的语法条件下,写一个功能强大一点的C语言编译器,再用C0编译前面的代码,得到可执行程序C1,功能比C0更加强大,能够支持的C语言的语法更加丰富。这个时候就可以扔掉前面用汇编语言写的C0了。
继续重复上面的步骤,得到编译器C2, C3……
最终我们可以得到一个可以完全支持C语言标准的编译器Cx,有了它我们就可以编译任何用C语言写的代码了。
我们只需要最后保留最后一次生成的Cx编译器和源代码就可以了。
这个就是编程语言自举,有了这过程,我们才说C语言编译器是用 C语言写的。
提个问,那汇编语言最早用什么语言写的呢?欢迎网友留言自己的答案。
领取专属 10元无门槛券
私享最新 技术干货