【发布时间】:2011-03-04 22:47:23
【问题描述】:
Eclipse 的 Java 编译器只是封装了 javac 程序所封装的同一个内核,还是完全是一个单独的编译器?如果是后者,他们为什么要重新发明轮子?
【问题讨论】:
Eclipse 的 Java 编译器只是封装了 javac 程序所封装的同一个内核,还是完全是一个单独的编译器?如果是后者,他们为什么要重新发明轮子?
【问题讨论】:
Eclipse 已经实现了自己的编译器,称为Eclipse Compiler for Java (ECJ)。
它与 javac 不同,javac 是 Sun JDK 附带的编译器。一个显着的区别是 Eclipse 编译器允许您运行实际上没有正确编译的代码。如果出现错误的代码块从未运行,您的程序将运行良好。否则,它将抛出一个异常,表明您尝试运行无法编译的代码。
另一个区别是 Eclipse 编译器允许在 Eclipse IDE 中进行增量构建,也就是说,一旦您完成输入,所有代码就会被编译。
Eclipse 自带编译器这一事实也很明显,因为您可以在 Eclipse 中编写、编译和运行 Java 代码,甚至无需安装 Java SDK。
ECJ 优于 javac 的几个例子是:
【讨论】:
-proceedOnError,它根本不会从有错误的来源。
每个人都已经解释过它们是不同的。以下是我注意到的两个编译器之间的一些行为差异。它们都归结为(至少)其中一种实现中的错误。
【讨论】:
Eclipse 的内置编译器基于 IBM 的 Jikes java compiler。 (请注意,Eclipse 也是在 IBM 开始的)。在JDK中完全独立于Sun的Java编译器;它不是 Sun 的 javac 的封装。
Jikes 已经存在很长时间了,它曾经比标准的 JDK Java 编译器快很多(但我不知道这是否仍然正确)。至于 IBM 为什么要编写自己的 Java 编译器:可能是因为许可原因(他们也有自己的 Java 实现)。
【讨论】:
它完全是一个单独的编译器。这是必需的,因为 javac 不允许编译来自 the eclipse site 的轻微损坏的代码
增量 Java 编译器。作为 Eclipse 构建器实现,它基于从 VisualAge for Java 编译器演变而来的技术。特别是,它允许运行和调试仍然包含未解决错误的代码。
【讨论】: