非常に高速にコンパイルするコンパイラを設計する方法を知りたいです。
最初に、私の質問に対する明らかな誤解を解消させてください。
コンパイラによって生成されるコードの速度について話しているのではありません。生成されたコードを最適化する方法を学習するために利用できるリソースは、すでにたくさんあります。私が見つけるのに苦労しているのは、コンパイラを高速にするための情報です。
また、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 のサイズははるかに小さかったが、典型的なプログラムのサイズも同様だった。)
あれですか?それとも、他の重要な革新が関係していましたか? それ以来、コンパイラの速度に重要な改善がありましたか?