我想知道如何设计一个编译非常非常快的编译器。
首先,让我避免对我的问题的一些明显误解:
我不是在谈论编译器生成的代码的速度。已经有许多资源可用于学习如何优化生成的代码。我很难找到有关使编译器快速的信息。
我也没有兴趣讨论为什么 C++ 编译器通常比 Java 编译器慢(例如)。我对可以使用哪些技术来加速任何给定语言的编译器感兴趣。
我也不想听到像 Microsoft 的 Incredibuild 或 Unix 的 distcc 这样的分布式编译系统。这些系统不会给你更快的编译器,它们只是给你更多的编译器。这当然很有用,但这不是我要问的问题。我想知道如何为单个 CPU 设计一个快速编译器。
ccache 也不是我正在寻找的答案。这是一个允许您完全避免使用编译器的系统,但它不会使编译器更快。同样,这很有用;再说一次,这不是我要问的问题。
我希望我的问题现在非常清楚。但也许一些历史会使它更加清晰。
C 编译器过去非常慢。然后,在 1986 年,THINK Technologies 推出了适用于 Macintosh 的 Lightspeed C,它几乎可以立即编译程序。Lightspeed C比所有其他 C 编译器快得多,几乎没有任何可比性。(也许 Lightspeed C 不是新一代闪电般快速的编译器中的第一个,但它是我经验中的第一个。Turbo Pascal 更早 [1983] 出现,但我没有使用它的经验,所以我不知道如何它比较,速度方面。)
从那时起,许多快速编译器已经可用。似乎在 1980 年代编译器技术发生了某种飞跃,这尤其是我想要理解的。突破是什么?
答案可能很简单:使用 Lightspeed 和 Turbo 等 IDE,集成编辑器已经在 RAM 中拥有源代码。如果编译器对这些数据进行操作,它将消除磁盘 I/O,这是所有编译器中最慢的部分。如果源代码大小相对于内存大小较小,那么这可能是提高速度的一个非常重要的因素。(在那些日子里,RAM 大小要小得多,但典型的程序大小也是如此。)
是这样吗?或者是否涉及其他重要的创新?从那时起,编译器速度是否有重大改进?