ある高水準言語を別の高水準言語に変換するコンパイラーを除いて、機械語にコンパイルするコンパイラーはアセンブリーで作成する必要がありますか?
2 に答える
コンパイラのソース コードは、アセンブリで記述する必要はありません。たとえば、(かなりの部分) CPython コンパイラ (技術的にはインタプリタ) は C で書かれています: http://en.wikipedia.org/wiki/Cpython
コンパイラが登場する前の最初の段階では、最初のコンパイラはアセンブリで作成する必要がありました。しかし、その後、誰かがこのコンパイラを使用して独自のコンパイラをコンパイルしました。その後、他の誰かがこのコンパイラを使用して独自のコンパイラをコンパイルしました。などなど。
これにより、「ブートストラップ」の概念が生まれます。ブートストラップ コンパイラは、コンパイルする言語で記述されたコンパイラです。clang コンパイラは C++ コードをコンパイルできますが、コンパイラ自体は C++ で記述されています。これはどのように作動しますか?最初の clang コンパイラは、別のコンパイラ (おそらく g++) によってコンパイルされました。clang コンパイラが十分に成熟すると、独自のコードをコンパイルできるようになりました。これで、clang コンパイラに加えられた変更はすべて、clang コンパイラによって別の clang コンパイラに再コンパイルできます。いいですね。