В чем разница между javac и компилятором Eclipse? - PullRequest
188 голосов
/ 17 июня 2010

Java-компилятор Eclipse - это просто оболочка вокруг того же ядра, в которое обернута программа javac, или это отдельный компилятор? Если последнее, зачем им изобретать велосипед?

Ответы [ 4 ]

198 голосов
/ 17 июня 2010

Eclipse внедрил собственный компилятор, который называется Eclipse Compiler for Java (ECJ).

Он отличается от javac, компилятора, поставляемого с Sun JDK. Одно заметное отличие состоит в том, что компилятор Eclipse позволяет запускать код, который на самом деле не компилировался должным образом. Если блок кода с ошибкой никогда не запускается, ваша программа будет работать нормально. В противном случае будет выдано исключение, указывающее, что вы пытались запустить код, который не компилируется.

Другое отличие состоит в том, что компилятор Eclipse допускает инкрементные сборки из Eclipse IDE, то есть весь код компилируется, как только вы заканчиваете ввод.

Тот факт, что Eclipse поставляется с собственным компилятором, также очевиден, поскольку вы можете писать, компилировать и запускать код Java в Eclipse, даже не устанавливая Java SDK.

Вот несколько примеров, когда ECJ предпочтительнее javac:

36 голосов
/ 17 июня 2010

Все уже объяснили, что они разные. Вот некоторые различия в поведении, которые я заметил между двумя компиляторами. Все они сводятся к ошибке (по крайней мере) в одной из реализаций.

Оптимизация во время компиляции

Родовой тип, связанный с выводом

16 голосов
/ 17 июня 2010

Встроенный компилятор Eclipse основан на компиляторе IBM Jikes .(Обратите внимание, что Eclipse также начал свою жизнь в IBM).Он полностью независим от Java-компилятора Sun в JDK;это не оболочка вокруг Sun * javac.

Jikes существует уже давно, раньше она была намного быстрее, чем стандартный Java-компилятор JDK (но я не знаю, так ли это до сих пор),Относительно того, почему IBM хотела написать свой собственный компилятор Java: возможно, по причинам лицензирования (у них также есть своя собственная реализация Java).

14 голосов
/ 17 июня 2010

Это вообще отдельный компилятор.Это необходимо, поскольку javac не позволяет компилировать слегка испорченный код с сайта затмения

Инкрементный компилятор Java.Реализованный как Eclipse Builder, он основан на технологии, разработанной на основе VisualAge для компилятора Java.В частности, он позволяет запускать и отлаживать код, который все еще содержит неразрешенные ошибки.

...