编译器和编程语言的鸡和蛋的问题
对于哲学问题先有鸡还是先有蛋一直是人们争论的焦点,但是从语言学定义来说,没有鸡如何定义鸡蛋,然而不管是先有鸡蛋还是先有鸡,因为它们的循环依赖,导致了彼此的共生。
对于软件行业来说,编程语言和编译器就很类似鸡和鸡蛋的关系。
用编程语言写出了编译器,反过来用编译器对编程语言进行了编译。
表面上来看,编译器和编程语言是彼此依赖的,但是更高层面上来讲它们是不断进化的。一开始的编程语言不完善,写出的编译器也是不完整的,然后我们用不完整的编译器编译了编程语言,让它逐渐变得完整,同时我们又用变得完整的编程语言,写出了更加完整的编译器。
究竟谁是最先产生的?
对于这个问题,一定是现有的编程语言,因为最早的编程语言我们可以认为它们不需要编译,因为它们可以直接来操作硬件,所以应该是先有A编程语言,然后用A编程语言编写了一个编译器,这个编译器可以编译B语言,然后B编程语言可以自己编写出自己的编译器来编译自己。
自举
一个人再有力气也无法给自己举起来,但是在软件编程里面,编译语言却可以用自己编写的编译器编译自己,这就叫做自举。
完成自举的过程。
- 用X语言把那个Y语言编译器写出来。
- 用Y语言把编译器编写出来,用上面的编译器进行编译。
- Y编译出来的编译器对Y进行编译,得到新的编译器。
- 新的编译器进行用例测试,没问题的话,用Y语言写的新的编译器就可以对Y语言编译,实现编译器自举。
现实中的例子
做一个打铁工具,然后用这个打铁工具又可以做出打铁工具。
用编程语言写出编辑器,反过来再用编辑器去写编程语言。
有钱了去投资,投资之后有了钱再去投资。
总结
相关推荐
Noneyes 2020-11-10
huavhuahua 2020-11-20
weiiron 2020-11-16
ailxxiaoli 2020-11-16
cakecc00 2020-11-15
千锋 2020-11-15
JakobHu 2020-11-14
chensen 2020-11-14
Nostalgiachild 2020-11-13
guangcheng 2020-11-13
zhangxiafll 2020-11-13
jipengx 2020-11-12
xirongxudlut 2020-11-10
solarLan 2020-11-09
pythonxuexi 2020-11-08
文山羊 2020-11-07
susmote 2020-11-07
wuShiJingZuo 2020-11-05
Pythonjeff远 2020-11-06