Eclipse的Java编译器只是包装了javac程序所包装的同一内核,还是完全是一个单独的编译器?如果是后者,他们为什么要另起炉灶呢?
javac
Eclipse实现了自己的编译器Eclipse Java编译器 (ECJ)。
它与javac不同,javac是Sun JDK附带的编译器。一个显著的区别是,Eclipse编译器允许您运行实际上没有正确编译的代码。如果包含错误的代码块从未运行,则程序将正常运行。否则,它将抛出一个异常,表明您试图运行未编译的代码。
另一个不同之处在于,Eclipse编译器允许从Eclipse IDE内部进行增量构建,也就是说,所有代码都在您完成输入后立即编译。
Eclipse自带编译器的事实也很明显,因为您甚至不需要安装Java SDK就可以在Eclipse中编写、编译和运行Java代码。
ECJ优于javac的几个例子是:
它完全是一个独立的编译器。这是必需的,因为javac不允许从日食地点编译稍有损坏的代码
增量式Java编译器。它是作为Eclipse构建器实现的,基于从用于Java编译器的VisualAge演变而来的技术。特别是,它允许运行和调试仍然包含未解决的错误的代码。
Eclipse的内置编译器基于IBM的Jikes java编译器。(注意,Eclipse也是在IBM诞生的)。它在JDK中完全独立于Sun的Java编译器;它不是Sun javac的包装器。
Jikes已经存在很长一段时间了,它曾经比标准的JDK Java编译器快得多(但我不知道这是否仍然正确)。至于为什么IBM想要编写自己的Java编译器:可能是因为许可的原因(他们也有自己的Java实现)。
每个人都已经解释过他们是不同的。下面是我注意到的两个编译器之间的一些不同之处。它们都归结为(至少)一个实现中的错误。