是否存在类似Java的Babel编译器?

时间:2017-10-20 22:42:00

标签: java kotlin aspectj javassist cglib

如果我们想确保我们的代码在所有浏览器版本中运行,那么使用javascript我们可以使用Babel。是否有类似于Java的东西,我们可以在Java 9中编写代码,但它将在Java 6运行时运行?

例如,Kotlin可以针对多个JVM运行时版本吗?

3 个答案:

答案 0 :(得分:3)

  

我希望像Kotlin这样的东西可以定位多个JVM运行时 - 我想我们现在只需要做梦。

您可以将Kotlin代码编译为JDK6,JDK7,JDK8,JDK9或JDK6以上的任何JDK。这就是支持Java 1.6级字节代码的意思。除了可能需要不同JDK版本的库之外,Kotlin的所有功能都将保持不变。

Kotlin生成的字节代码通常保持不变,与目标JVM版本无关。例外情况是,如果设置编译器选项jvmTarget = "1.8",则编译器可能(或可能不)使用JDK8的某些功能作为优化。

恕我直言,这个问题得到了所有的弊端,因为它是多么出乎意料。像Babel这样的工具是JavaScript独有的,因为在所有其他语言中它们都被称为编译器。由于JS认为它可以在没有编译器的情况下完成,因此我在部署时遇到了这些问题。 Java(非常有限)的后端移植工具,但它们只是编译器的插件。 Kotlin没有,因为它的开发独立于JDK,它必须支持1.6以上的所有以前的JDK版本。

总结一下,如果你使用Kotlin进行JVM或JS开发,你的梦想就会实现 - 你可以使用任何版本的Kotlin,任何JVM库,可能是ES5.1之上的任何JS库,并获得一致的运行时表示。

答案 1 :(得分:1)

有一个非官方的库retrolambda,它将Java 8功能lambda expression编译为Java 6(就像Babel一样)。

  

我想你会喜欢它,而且这里是:https://github.com/orfjackal/retrolambda

答案 2 :(得分:1)

您可以检查teaVM! http://teavm.org/也有dukeScript