¿El compilador de Java de Eclipse es solo un contenedor alrededor del mismo núcleo que el javac
programa, o es un compilador completamente diferente? Si esto último, ¿por qué iban a reinventar la rueda?
Eclipse ha implementado su propio compilador llamado Eclipse Compiler for Java (ECJ).
Es diferente del javac, el compilador que se envía con Sun JDK. Una diferencia notable es que el compilador Eclipse le permite ejecutar código que en realidad no se compiló correctamente. Si el bloque de código con el error nunca se ejecuta, su programa funcionará bien. De lo contrario, arrojará una excepción que indica que intentó ejecutar código que no se compila.
Otra diferencia es que el compilador de Eclipse permite compilaciones incrementales desde el IDE de Eclipse, es decir, todo el código se compila tan pronto como termine de escribir.
El hecho de que Eclipse viene con su propio compilador también es evidente porque puede escribir, compilar y ejecutar código Java en Eclipse sin siquiera instalar el SDK de Java.
Algunos ejemplos en los que se prefiere ECJ sobre javac son:
-proceedOnError
y simplemente no producirá archivos .class desde la fuente con errores.Todos ya han explicado que son diferentes. Aquí hay algunas diferencias en los comportamientos que he notado entre los dos compiladores. Todos se reducen a un error en (al menos) una de las implementaciones.
Optimización en tiempo de compilación relacionada
Genéricos relacionados con la inferencia de tipos
fuente
El compilador incorporado de Eclipse se basa en el compilador Java Jikes de IBM . (Tenga en cuenta que Eclipse también comenzó su vida en IBM). Es completamente independiente del compilador Java de Sun en el JDK; No es una envoltura alrededor de Sun's
javac
.Jikes ha existido durante mucho tiempo, solía ser mucho más rápido que el compilador JDK Java estándar (pero no sé si eso sigue siendo cierto). En cuanto a por qué IBM quería escribir su propio compilador de Java: tal vez por razones de licencia (también tienen su propia implementación de Java).
fuente
Es un compilador completamente separado. Esto es necesario ya que javac no permite la compilación de código ligeramente roto, desde el sitio eclipse
fuente