编译器和编程语言的鸡和蛋的问题

开发 前端
对于哲学问题先有鸡还是先有蛋一直是人们争论的焦点,但是从语言学定义来说,没有鸡如何定义鸡蛋,然而不管是先有鸡蛋还是先有鸡,因为它们的循环依赖,导致了彼此的共生。

 对于哲学问题先有鸡还是先有蛋一直是人们争论的焦点,但是从语言学定义来说,没有鸡如何定义鸡蛋,然而不管是先有鸡蛋还是先有鸡,因为它们的循环依赖,导致了彼此的共生。

对于软件行业来说,编程语言和编译器就很类似鸡和鸡蛋的关系。

 

[[348475]]

 

用编程语言写出了编译器,反过来用编译器对编程语言进行了编译。

表面上来看,编译器和编程语言是彼此依赖的,但是更高层面上来讲它们是不断进化的。一开始的编程语言不完善,写出的编译器也是不完整的,然后我们用不完整的编译器编译了编程语言,让它逐渐变得完整,同时我们又用变得完整的编程语言,写出了更加完整的编译器。

究竟谁是最先产生的?

对于这个问题,一定是现有的编程语言,因为最早的编程语言我们可以认为它们不需要编译,因为它们可以直接来操作硬件,所以应该是先有A编程语言,然后用A编程语言编写了一个编译器,这个编译器可以编译B语言,然后B编程语言可以自己编写出自己的编译器来编译自己。

自举

一个人再有力气也无法给自己举起来,但是在软件编程里面,编译语言却可以用自己编写的编译器编译自己,这就叫做自举。

完成自举的过程。

 

编译器和编程语言的鸡和蛋的问题

 

  • 用X语言把那个Y语言编译器写出来。
  • 用Y语言把编译器编写出来,用上面的编译器进行编译。
  • Y编译出来的编译器对Y进行编译,得到新的编译器。
  • 新的编译器进行用例测试,没问题的话,用Y语言写的新的编译器就可以对Y语言编译,实现编译器自举。

现实中的例子

做一个打铁工具,然后用这个打铁工具又可以做出打铁工具。

用编程语言写出编辑器,反过来再用编辑器去写编程语言。

 

编译器和编程语言的鸡和蛋的问题

 

有钱了去投资,投资之后有了钱再去投资。

总结

编译器本身是一种将一种语言翻译成另一种语言的工具,至于它本身是如何编写的,我们其实并不太关心,只要它可以准确快速地帮我们完成翻译的工作就可以了。

先有鸡还是先有蛋并不重要,重要的是我们既可以吃鸡,又可以吃鸡蛋。

责任编辑:华轩 来源: 今日头条
相关推荐

2010-05-28 14:55:17

Linux编程工具

2013-07-22 10:35:32

用户需求技术创新产品

2020-11-09 09:52:11

程序数据

2016-11-02 00:22:13

数字化改造数字化

2010-05-28 15:34:14

Linux编程工具

2010-01-18 10:34:21

C++编译器

2018-08-23 05:07:36

神经架构深度学习神经网络

2015-08-14 09:49:25

u3dc#

2017-09-01 11:35:37

C++语言编译器

2010-06-04 17:37:45

Linux编程工具

2011-07-20 16:43:33

iPhone Bug Xcode

2020-11-03 10:32:22

编译器工具代码

2010-03-23 11:17:16

Python 动态编译

2010-10-20 13:43:37

C++编译器

2022-05-18 09:31:42

编译器开源代码生成

2012-06-06 09:04:54

Roslyn

2014-03-03 10:00:53

编译器集成开发环境

2011-10-20 15:06:47

Project Ros

2010-01-12 16:42:59

C++编译器

2014-03-06 09:18:48

C++CIDE
点赞
收藏

51CTO技术栈公众号