204

Eclipse 的 Java 编译器只是包装程序javac所围绕的同一个核心的包装器,还是完全是一个单独的编译器?如果是后者,他们为什么要重新发明轮子?

4

4 回答 4

213

Eclipse 已经实现了自己的编译器,称为Eclipse Compiler for Java (ECJ)。

它与 javac 不同,javac 是 Sun JDK 附带的编译器。一个显着的区别是 Eclipse 编译器允许您运行实际上没有正确编译的代码。如果出现错误的代码块从未运行,您的程序将运行良好。否则,它将抛出一个异常,表明您尝试运行无法编译的代码。

另一个区别是 Eclipse 编译器允许从 Eclipse IDE 中进行增量构建,也就是说,一旦您完成输入,所有代码都会被编译。

Eclipse 自带编译器这一事实也很明显,因为您可以在 Eclipse 中编写、编译和运行 Java 代码,甚至无需安装 Java SDK。

ECJ 优于 javac 的几个例子是:

于 2010-06-17T12:45:28.450 回答
36

每个人都已经解释过他们是不同的。以下是我注意到的两个编译器之间的一些行为差异。它们都归结为(至少)其中一种实现中的错误。

编译时优化相关

泛型类型推断相关

于 2010-06-17T15:18:42.950 回答
18

Eclipse 的内置编译器基于 IBM 的Jikes java 编译器。(请注意,Eclipse 也是在 IBM 开始的)。在JDK中完全独立于Sun的Java编译器;它不是 Sun 的javac.

Jikes 已经存在很长时间了,它曾经比标准的 JDK Java 编译器快很多(但我不知道这是否仍然正确)。至于 IBM 为什么要编写自己的 Java 编译器:可能是因为许可的原因(他们也有自己的 Java 实现)。

于 2010-06-17T12:47:18.740 回答
15

它完全是一个单独的编译器。这是必需的,因为 javac 不允许编译来自eclipse 站点的轻微损坏的代码

一个增量 Java 编译器。作为 Eclipse 构建器实现,它基于从 VisualAge for Java 编译器演变而来的技术。特别是,它允许运行和调试仍然包含未解决错误的代码。

于 2010-06-17T12:46:20.817 回答