自举的缺点?

Nis*_*ant 4 compiler-construction programming-languages

我已经看到很多关于bootstrapping的链接,我想知道使用C编程而不是使用汇编语言来引导X语言编译器的主要缺点是什么?我想知道是否使用C会限制我做的任何事情,就像汇编语言创建一样'C'(即C的编译器如何做).

例如,我在Python中编写的任何东西最终都会被CPython照顾,最终在硬件中以类似C的方式进行 - 这可能不是最佳的?

当然C可能是非常好的语言,但对于其他一般语言,可能不是这样.引导最终是否会产生一些瓶颈,特定于我用于制作引导编译器的语言的限制?像机器代码生成就像C生成代码而不是一些随机方式.

使用C的主要原因是它能很好地将我们的代码映射到机器语言,但它不如汇编那么好吗?所以C有一些性能问题,现在我用C来创建另一种语言的编译器,所以我必须传递那些性能问题吗?毕竟C没有做1-1映射到汇编 - 希望你得到我的问题.

小智 5

我们之前有过一个非常相似的问题,要求用汇编语言编写Python解释器.所有这些都适用于编译器:这是一个令人难以置信的努力(以至于几乎不可能完成这么大的任何事情),它会使维护成本爆炸,如果它有所帮助,它会非常少地购买 - 在至少有 2/3的情况下,它将是主动有害的,因为我们都不能打败现代的C编译器.

再有就是用你的推理另一个问题:虽然我们希望我们的编译器做快做写编译调试周期更讨人喜欢和浪费时间的中间部分时,性能的编译器不影响性能已编译的程序 - 后者(具体而言,实际上最佳的运行时性能)通常更重要.为此,您需要许多非常复杂的算法来进行非常聪明的优化.如前所述,在汇编语言中已经非常难以实现大型解释器.进行所有这些优化更加困难.

哦,虽然我们正在努力:Bootstrapping实际上可以带来更好的性能.该PyPy项目实现的Python在Python(的子集).你说,一定是神经过慢吗?错误!它可以比CPython更快地运行几乎所有程序,CPy用C语言编写(尽可能映射到程序集),并且在很多年里由非常聪明的人进行优化.通常,它只需要一小部分时间.当然,他们通过使用Just In Time编译器获胜,这种编译器本质上非常适合优化动态语言.但即使非JIT版本(常规解释器)通常也比CPython慢​​不到2倍.查看PyPy速度中心.