什么是自举?

就是自己的编译器可以自行编译自己的编译器。
实现方法就是这个编译器的作者用这个语言的一些特性来编写编译器并在该编译器中支持这些自己使用到的特性。
首先,第一个编译器肯定是用别的语言写的(不论是C还是Go还是Lisp还是Python),后面的版本才能谈及自举。
例如Python解释器中的CPython、JPython、PyPy等版本,PyPy就是自举。

自举的意义?

自举过程中和自举之后,核心开发者每天使用自己设计的语言工作(开发自己的编译器),不断的在实践中锻造,利于及早发现设计缺陷和不足之处,并及时解决;自举之前,只能每天花费大量的时间和精力,使用其他编程语言开发和维护自己的编译器,学习积累的都是别的语言的经验和教训,缺少在实践中检验自己设计的语言的机会。如果自己设计的语言自己都不去深度地使用,又上哪里获取第一手的反馈信息呢,又如何改善呢。
所以自举越早对编程语言自身发展完善越有利,最好是在自身定型之前尽早自举。
如果你的语言不是图灵完备,或者缺乏好用的指针等其它高级玩意儿,前者往往无法自举,后者你累死你也很难写出自举的程序来。

什么是图灵完备?

Turing completeness In computability theory, a system of data-manipulation rules (such as an instruction set, a programming language, or a cellular automaton) is said to beTuring complete or computationally universal if and only if it can be used to simulate any single-taped Turing machine and thus in principle any computer. 在可计算理论里,一个数据操作规则的系统(比如:指令集、编程语言、细胞自动机)被称作图灵完备或者通用计算的,当且仅当它可以被用来模拟单带图灵机。

简单来说,都能完全模拟图灵机的就完备的。

文章来源: https://www.cnblogs.com/lidyan/p/6727184.html