Is de Java-compiler van Eclipse slechts een wikkel rond dezelfde kern waar het javac
-programma omheen is gewikkeld, of is het een aparte compiler? Als dat laatste het geval is, waarom zouden ze dan het wiel opnieuw uitvinden?
Antwoord 1, autoriteit 100%
Eclipse heeft zijn eigen compiler geïmplementeerd genaamd Eclipse Compiler voor Java (HvJ).
Het is anders dan de javac, de compiler die bij Sun JDK wordt geleverd. Een opmerkelijk verschil is dat je met de Eclipse-compiler code kunt uitvoeren die niet goed is gecompileerd. Als het codeblok met de fout nooit wordt uitgevoerd, zal uw programma goed werken. Anders wordt er een uitzondering gegenereerd die aangeeft dat je code hebt geprobeerd uit te voeren die niet compileert.
Een ander verschil is dat de Eclipse-compiler incrementele builds mogelijk maakt vanuit de Eclipse IDE, dat wil zeggen dat alle code wordt gecompileerd zodra u klaar bent met typen.
Het feit dat Eclipse met een eigen compiler wordt geleverd, is ook duidelijk omdat je Java-code in Eclipse kunt schrijven, compileren en uitvoeren zonder zelfs maar de Java SDK te installeren.
Een paar voorbeelden waarbij het HvJ de voorkeur heeft boven javac zijn:
- Apache Tomcatgebruikt ECJ om JSP’s te compileren,
- IntelliJ IDEAheeft ondersteuning voor ECJ, vanaf GNU-compiler voor Java(GCJ) 4.3,
- GCJ integreert met ECJ,
- Liferay bouwt met ECJ.
Antwoord 2, autoriteit 17%
Iedereen heeft al uitgelegd dat ze anders zijn. Hier zijn enkele verschillen in gedrag dat ik heb opgemerkt tussen de twee compilers. Ze komen allemaal neer op een bug in (minstens) een van de implementaties.
Compile-time optimalisatie gerelateerd
Generieke type gevolgtrekking gerelateerd
- Generica compileert en draait in Eclipse, maar compileert niet in javac
Compilers gedragen zich anders met een null-parameter van een generieke methode
Antwoord 3, autoriteit 8%
De ingebouwde compiler van Eclipse is gebaseerd op IBM’s Jikes java-compiler. (Merk op dat Eclipse ook zijn leven begon bij IBM). Het is volledig onafhankelijk van de Java-compiler van Sun in de JDK; het is geen wrapper rond Sun’s javac
.
Jikes bestaat al heel lang, het was vroeger een stuk sneller dan de standaard JDK Java-compiler (maar ik weet niet of dat nog steeds zo is). Waarom IBM hun eigen Java-compiler wilde schrijven: misschien vanwege licentieredenen (ze hebben ook hun eigen Java-implementatie).
Antwoord 4, autoriteit 7%
Het is een aparte compiler. Dit is nodig omdat Java geen compilatie toestaat van enigszins gebroken code van de eclipse-site
Een incrementele Java-compiler. Geïmplementeerd als een Eclipse-builder, is het gebaseerd op technologie die is geëvolueerd uit de VisualAge voor Java-compiler. Het maakt het in het bijzonder mogelijk om code uit te voeren en te debuggen die nog steeds onopgeloste fouten bevat.