什么是编程语言的自举?


什么是编程语言的自举?自己编译自己?怎么实现的?到底是先有蛋还是先有鸡?

编程语言

xiire 10 years, 2 months ago

FreeBirdLjj仁兄说得很到位……其实这种事情经常发生。比如我有了一台电脑,就可以用这台电脑去做计算机辅助设计,就能造出更好的电脑来了。

最是一抹蘇打綠 answered 10 years, 2 months ago

就是自己的编译器可以自行编译自己的编译器。
实现方法就是这个编译器的作者用这个语言的一些特性来编写编译器并在该编译器中支持这些自己使用到的特性。
首先,第一个编译器肯定是用别的语言写的(不论是C还是Go还是Lisp还是Python),后面的版本才能谈及自举。
至于先有鸡还是先有蛋,我可以举个这样的不太恰当的例子:比如我写了一个可以自举的C编译器叫作 mycc ,不论是编译器本身的执行效率还是生成的代码的质量都远远好于 gcc (本故事纯属虚构),但我用的都是标准的C写的,那么我可以就直接用 gcc 编译 mycc 的源码,得到一份可以生成高质量代码但本身执行效率低下的 mycc ,然后当然如果我再用这个生成的 mycc 编译 mycc 的源码得到新的一份 mycc ,新的这份不光会产生和原来那份同等高质量的代码,而且还能拥有比先前版本更高的执行效率(因为前一份是 gcc 的编译产物,后一份是 mycc 的编译产物,而 mycc 生成的代码质量要远好于 gcc 的)。故事虽然是虚构的,但是道理差不多就是这么个道理。这也就是为什么如果从源码编译安装新版本的 gcc 的话,往往会“编译——安装”两到三遍的原因。

北极狐豆腐 answered 10 years, 2 months ago

例如go语言现在就是采用这样的机制,用go来写编译器

cyrix answered 10 years, 2 months ago

自己可以编译自己,自己拽着自己的头发能把自己提起来。整个计算机系统从硬到软最基础的部分都是自举的。

坑爹呢这是......啪 answered 10 years, 2 months ago

Your Answer