难以维护,JavaScript引擎Nashorn将被弃用!

JavaScript引擎Nashorn最早被纳入到2014年3月发布的JDK 8中。不过,看起来它的生命周期可能比我们想象的要短。原因?正如JEP 335中所解释的那样,“难以维护”。

难以维护,JavaScript引擎Nashorn将被弃用!

你有没有使用过Nashorn?根据JEP 335的说法,如果您有兴趣,可能需要将其放在待办事项列表中,因为Nashorn和API以及jjs工具可能很快就会被弃用。

在Nashorn之前,有Rhino,一个完全用Java编写的JavaScript的开源实现。JDK 8附带了一个名为Oracle Nashorn的引擎,该引擎提供了“更好地符合ECMA标准化JavaScript规范,并通过invokedynamic绑定的调用站点提供更好的运行时性能”。

JEP 335的解释:

当它被发布时,它完全实现了ECMAScript-262 5.1标准。随着ECMAScript语言构建的快速步伐以及API的调整和修改,我们发现Nashorn具有挑战性,难以维护。

尽管不愿看到Nashorn被弃用,但这是可以理解的。因为保持这个速度对于一个小团队来说是很难的,因为GraalVM的JS实现速度绝对快。

但是,此弃用不会影响javax.script API。

Nashorn只是三个JDK模块中的一个,它们将被终止使用,因此使用@Deprecated(forRemoval = true)进行注释:

  • jdk.scripting.nashorn - 包含jdk.nashorn.api.scripting和jdk.nashorn.api.tree包。
  • jdk.scripting.nashorn.shell - 包含jjs工具。运行jjs将显示警告:警告:jjs工具计划从未来的JDK版本中删除。
  • jdk.dynalink - 包含Dynalink支持库。

注意:将在未来的JDK特性版本中提交单独的JEP以实际删除类型和模块。

那么你现在应该使用什么?

一个可行的替代方案似乎是GraalJS,它使用Oracle Labs的Truffle技术,并可能很快作为Java模块公开提供。由于GraalJS提供了与Nashorn大部分相同的功能,但性能更佳,因此您应该仔细研究一下。

相关推荐