EclipseのJavaコンパイラは、javac
プログラムがラップされているのと同じコアの単なるラッパーですか、それとも完全に別個のコンパイラですか?後者の場合、なぜ彼らは車輪を再発明するのでしょうか?
Eclipseは、 Eclipse Compiler for Java (ECJ)と呼ばれる独自のコンパイラーを実装しています。
Sun JDKに同梱されているコンパイラであるjavacとは異なります。注目すべき違いの1つは、Eclipseコンパイラーを使用すると、実際に正しくコンパイルされなかったコードを実行できることです。エラーのあるコードブロックが実行されない場合、プログラムは正常に実行されます。それ以外の場合、コンパイルされないコードを実行しようとしたことを示す例外がスローされます。
もう1つの違いは、EclipseコンパイラーはEclipse IDE内からのインクリメンタルビルドを許可することです。つまり、入力を完了するとすぐにすべてのコードがコンパイルされます。
Java SDKをインストールしなくてもEclipseでJavaコードを記述、コンパイル、実行できるため、Eclipseに独自のコンパイラーが付属していることも明らかです。
ECJがjavacより優先されるいくつかの例は次のとおりです。
誰もが彼らが異なっていることをすでに説明しています。 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コンパイラーから進化したテクノロジーに基づいています。特に、未解決のエラーがまだ残っているコードを実行およびデバッグできます。