ここjavac
からソース コードをダウンロードしましたが、それ自体が Java 言語で記述されていることがわかりました。ただし、c/c++ で記述されていることを期待していました。
とにかく、Java コンパイラがなかったときに、この Java で書かれた Java コンパイラ ソース コードはどのようにコンパイルされたのでしょうか。
ここjavac
からソース コードをダウンロードしましたが、それ自体が Java 言語で記述されていることがわかりました。ただし、c/c++ で記述されていることを期待していました。
とにかく、Java コンパイラがなかったときに、この Java で書かれた Java コンパイラ ソース コードはどのようにコンパイルされたのでしょうか。
コンパイルする言語で書かれたコンパイラは、ブートストラップ コンパイラと呼ばれます。
それらが作成される方法は一種のヘッドトリップですが、考えてみてください: 元の言語が書かれたとき、Java はなかったので、実際には C/C++ で書かれた別の言語でコンパイラを作成する必要がありました。 . ここで確認してください: JavaコンパイラとJVMはどの言語で書かれていますか?
また、あなたが知っているかどうかはわかりませんが、Java の動作方法は、コンパイラ ( javac
) が実際にマシン コード ファイルを生成するのではなく、JVM によって解釈されるバイトコード ファイルを作成することです。
通常、ブートストラップするには、既存の Java コンパイラ (およびランタイム) が必要です。ただし、 Jikesなど、C++ で記述された他の Java コンパイラも利用できます。Jikes を使用して OpenJDK をブートストラップできるかどうかは別の話ですが、理論的には可能なはずです。