是否存在类似巴别塔的Java编译器?

是否存在类似巴别塔的Java编译器?,java,kotlin,aspectj,javassist,cglib,Java,Kotlin,Aspectj,Javassist,Cglib,如果我们想确保我们的代码在所有可以使用的浏览器版本中运行,那么就使用javascript。对于Java,我们可以用Java9编写代码,但它将在Java6运行时运行,是否存在类似的情况 例如,Kotlin可以针对多个JVM运行时版本吗 我希望像Kotlin这样的东西能够针对多个JVM运行时——我想我们现在只能做梦了 您可以将Kotlin代码编译为JDK6、JDK7、JDK8、JDK9或JDK6之上的任何JDK。这就是支持Java1.6级字节码的意思。Kotlin的所有功能都将保持不变,除了库,它可

如果我们想确保我们的代码在所有可以使用的浏览器版本中运行,那么就使用javascript。对于Java,我们可以用Java9编写代码,但它将在Java6运行时运行,是否存在类似的情况

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

我希望像Kotlin这样的东西能够针对多个JVM运行时——我想我们现在只能做梦了

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

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

我知道这个问题之所以有缺点,是因为它出乎意料。像Babel这样的工具对于JavaScript来说是独一无二的,因为在所有其他语言中它们都被称为编译器。由于JS决定它可以不使用编译器,所以我在部署方面遇到了这样的问题。Java有(非常有限的)后移植工具,但它们只是编译器的插件。Kotlin没有,因为它的开发独立于JDK,并且它必须支持1.6以上的所有以前的JDK版本


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

有一个非官方的库
retrolambda
,它将
Java8
功能
lambda表达式
编译成
Java6
(就像巴贝尔一样)

我想你会喜欢的,这是:


你可以检查teaVM!还有dukeScript

根据我们的指导,“有些问题仍然是离题的,即使它们属于上面列出的类别之一:……要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题是离题的……”不确定为什么所有的反对票,这是@RobertColumbia指出的经验法则的一个合法例外:因为Java(与Javascript不同)是静态类型的,所以您要检查的是您的代码是否同时针对Java 6和Java 9编译。幸运的是:)Java9的编译器有一些标志,允许您根据兼容性获取警告或中断。有关更多信息,请参阅:@alfasin即使您的代码在两个版本中都编译过,您如何知道它执行相同的操作?@RobertColumbia有一种东西叫做回归测试和单元测试…@Ole我知道。