EclipseのJavaコンパイラjavac
は、プログラムがラップされているのと同じコアのラッパーにすぎませんか、それとも完全に別のコンパイラですか?後者の場合、なぜ彼らは車輪を再発明するのでしょうか?
EclipseのJavaコンパイラjavac
は、プログラムがラップされているのと同じコアのラッパーにすぎませんか、それとも完全に別のコンパイラですか?後者の場合、なぜ彼らは車輪を再発明するのでしょうか?
回答:
Eclipseは、Eclipse Compiler for Java(ECJ)と呼ばれる独自のコンパイラーを実装しています。
これは、Sun JDKに同梱されているコンパイラであるjavacとは異なります。注目すべき違いの1つは、Eclipseコンパイラーでは、実際には正しくコンパイルされなかったコードを実行できることです。エラーのあるコードブロックが実行されない場合、プログラムは正常に実行されます。そうしないと、コンパイルしないコードを実行しようとしたことを示す例外がスローされます。
もう1つの違いは、EclipseコンパイラーがEclipse IDE内からのインクリメンタルビルドを可能にすることです。つまり、入力を完了するとすぐにすべてのコードがコンパイルされます。
Eclipseには独自のコンパイラーが付属しているという事実も明らかです。これは、Java SDKをインストールしなくても、EclipseでJavaコードを記述、コンパイル、および実行できるためです。
ECJがjavacよりも優先されるいくつかの例は次のとおりです。
-proceedOnError
。これにより、エラーのあるソースから.classファイルが生成されなくなります。
誰もがそれらが異なるとすでに説明しました。2つのコンパイラ間で気付いた動作の違いを以下に示します。それらはすべて、少なくとも1つの実装のバグに要約されます。
Eclipseの組み込みコンパイラは、IBMのJikes Javaコンパイラに基づいています。(EclipseもIBMで生まれました)。JDKのSunのJavaコンパイラから完全に独立しています。Sunのラッパーではありませんjavac
。
Jikesは長い間存在しており、以前は標準のJDK Javaコンパイラよりはるかに高速でした(しかし、それが本当かどうかはわかりません)。IBMが独自のJavaコンパイラーを作成したかった理由については、おそらくライセンス上の理由によるものです(独自のJava実装もある)。
完全に別のコンパイラです。javacはEclipseサイトからのわずかに壊れたコードのコンパイルを許可しないため、これが必要です。
インクリメンタルJavaコンパイラ。Eclipseビルダーとして実装され、VisualAge for Javaコンパイラーから進化したテクノロジーに基づいています。特に、未解決のエラーを含むコードを実行およびデバッグできます。