Nashorn 获投票通过,成为 OpenJDK 项目中 Rhino 的后继

  • Abhay Bakshi
  • 臧秀涛

2013 年 1 月 18 日

话题:Java语言 & 开发

Oracle 的 Nashorn 项目是一种新的基于 JVM 的 JavaScript 实现,经过目前 OpenJDK成员的投票,该项目成为当前 JVM JavaScript 实现 Rhino 的后继。Nashorn 定于在 2013 末与 Java 8 一同发布。它既支持将 JavaScript 嵌入到 Java 应用程序中,也支持开发独立的 JavaScript 应用。

InfoQ 曾于 2012 年 11 月报道过John Coomes(OpenJDK HotSpot 开发组的领导者)的用 Nashorn 替换 Rhino 的提议。后来在去年 12 月,据Nashorn 官方博客介绍,这一由Jim Laskey领导的项目已经进入 OpenJDK 之中。官方博客上最新的一篇文章提到,开发者已经可以浏览该项目的源代码,还可以构建并把玩其代码库。Nashorn 项目团队计划进行更多的集成工作。

Nashorn 是 Oracle 在 2011 年夏季的 JVM Language Summit 上宣布的,其目标是提升 JVM 作为多语言平台的实用性。JSR-292 已经包含在 2011 年的 Java 7 中,主要关注的就是动态语言的需求。InfoQ早在 2011 年初就做过全面的报道,有的方法具有 Java 之外的语言所定义的链接和分派语义,JSR-292 添加了 invokedynamic 指令,以便 Java 字节码能够调用这样的方法。JVM 上很多现有的动态语言都使用 invokedynamic 升级了其实现。关于 Nashorn 和 JSR-292 的关系,Jim Laskey 在他的题为“Adventures in JSR-292 or How To Be a Duck Without Really Trying”的视频中有很好的介绍。

让 JavaScript 运行在 JVM 上,主要优点是可以访问大量既有的 Java 库。在 Nashorn 的博客上,Jim 通过一个例子演示了 Nashorn 与 Twitter4J 和 JavaFX 等 Java 库的无缝集成。互操作是通过Dynalink库处理的,该库提供了一组协议约定来指定一个程序执行环境中对象上的高层操作,还提供了一个针对纯 Java 对象的链接器。

通过 Twitter4J 和 JavaFX 的例子,Jim Laskey 提到:

也请注意,Nashorn 可以魔法般地处理一般的 FXCollections 类。最后,通过调用 observableArrayList(dates),Nashorn 会自动将 JavaScript 数组 dates 转换为一个 Java 集合。真的很难区分哪个对象是 JavaScript 的,哪个是 Java 的。

在 JavaOne 2012 大会上,大家向 Nashorn 项目团队提了很多问题,主要是关于 Nashorn 和 Node.jar 的。Node.jar 是一种服务端 JavaScript 框架,混合了事件模型、Node.js API、Nashorn 的特性以及 GlassFish 中的 Grizzly(用于支持异步网络 I/O),支持开发者通过 Java SE 和 Java EE 运行 Node 应用程序。根据与会人员的反应,Nashorn 团队的 Jim Laskey 等人认为目前 Nashorn + Node.jar 组合的方式引起了开发者社区浓厚的兴趣。

通过 JavaOne 兴趣小组(Birds-of-a-Feather)的BOF 多媒体课程(该课程是由 JavaOne 2012 网站托管的),你可能实际上就等于见到 Oracle 的 Nashorn JavaScript 团队了。

查看英文原文Nashorn Voted In as a Successor to Rhino in the OpenJDK Project

Java语言 & 开发