我想知道如何设计一个编译器,使其编译速度非常非常快。
首先,让我澄清一些问题:
我不是在谈论编译器生成的代码的速度。已经有很多资源可供学习如何优化生成的代码。我找不到的是使编译器本身变快的信息。
我也不感兴趣讨论为什么C++编译器通常比Java编译器慢(例如)。我感兴趣的是可以用什么技术加速任何给定语言的编译器。
我也不想听关于Microsoft的Incredibuild或Unix的distcc之类的分布式编译系统。这些系统不能为您提供更快的编译器,它们只是为您提供了更多的编译器。这当然有用,但这不是我要问的问题。我想知道如何为单个CPU设计一个快速的编译器。
ccache也不是我要找的答案。那是一个允许您完全避免使用编译器的系统,但它并没有使编译器更快。同样,这是有用的;同样,这不是我要问的问题。
我希望我的问题现在非常清楚了。但也许一些历史可以使它更清晰。
C编译器以前真的很慢。然后,在1986年,THINK Technologies推出了Macintosh的Lightspeed C,它几乎可以瞬间编译程序。Lightspeed C比所有其他C编译器都要快得多,几乎没有可比性。(也许Lightspeed C不是第一批新一代闪电般快速编译器中的第一个,但它是我经历过的第一个。Turbo Pascal早在1983年就问世了,但我没有经验,所以我不知道它在速度方面如何比较。)
此后,许多快速编译器已经问世。似乎在20世纪80年代,编译器技术发生了某种飞跃,这正是我试图理解的。那么,这个突破是什么呢?
答案可能很简单:使用像Lightspeed和Turbo这样的IDE,集成编辑器已经将源代码存储在RAM中。如果编译器使用该数据进行操作,则可以消除磁盘I/O,这是任何编译器最慢的部分。如果源代码大小相对于内存大小较小,则这可能是速度提高的非常重要的贡献因素。(在那些日子里,RAM尺寸要小得多,但典型程序的尺寸也比现在小。)
就是这样吗?还是有其他重要的创新 involved ?自那时以来,编译器速度有重要的改进吗?