web-dev-qa-db-fra.com

Quelle est la différence entre javac et le compilateur Eclipse?

Le compilateur d’Eclipse Java est-il juste un wrapper autour du même noyau que le programme javac est encerclé, ou est-ce un compilateur séparé? roue?

191
Bart van Heukelom

Eclipse a mis en œuvre son propre compilateur appelé Compilateur Eclipse pour Java (ECJ).

Il diffère du javac, le compilateur fourni avec Sun JDK. Une différence notable est que le compilateur Eclipse vous permet d’exécuter du code qui n’a pas été compilé correctement. Si le bloc de code avec l'erreur n'est jamais exécuté, votre programme s'exécutera correctement. Sinon, il lève une exception indiquant que vous avez essayé d'exécuter du code non compilé.

Une autre différence est que le compilateur Eclipse permet des constructions incrémentielles à partir de l'IDE Eclipse, c'est-à-dire que tout le code est compilé dès que vous avez fini de taper.

Le fait qu'Eclipse soit livré avec son propre compilateur est également évident car vous pouvez écrire, compiler et exécuter le code Java dans Eclipse sans même installer le SDK Java.

Quelques exemples de cas où la CJCE est préférée au javac est:

200
jjnguy

Tout le monde a déjà expliqué qu'ils sont différents. Voici quelques différences de comportement que j'ai remarquées entre les deux compilateurs. Ils se résument tous à un bug dans (au moins) une des implémentations.

Optimisation à la compilation

Génériques liés à l'inférence de type

36
polygenelubricants

Le compilateur intégré d'Eclipse est basé sur le compilateur d'IBM Jikes Java . (Notez qu'Eclipse a également commencé sa vie sur IBM). Il est complètement indépendant de celui de Sun === Java compilateur dans le JDK; ce n'est pas un wrapper autour du fichier javac de Sun.

Jikes existe depuis longtemps, il était beaucoup plus rapide que le JDK standard Java (mais je ne sais pas si cela est toujours vrai). Pourquoi IBM voulait-il écrire? leur propre Java: peut-être pour des raisons de licence (ils ont également leur propre implémentation Java)].

17
Jesper

C'est un compilateur à part entière. Ceci est nécessaire car javac ne permet pas la compilation de code légèrement cassé, à partir de le site Eclipse

Un compilateur incrémentiel Java. Mis en œuvre en tant que générateur Eclipse, il repose sur la technologie mise au point à partir de VisualAge pour le compilateur Java. Il permet notamment de lancer et de déboguer code qui contient encore des erreurs non résolues.

14
BenM