QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Jim Laskey 提议将 Nashorn 作为 OpenJDK 的 JavaScript 引擎

  • 2013-01-09
  • 本文字数:1042 字

    阅读完需:约 3 分钟

近日,Oracle 的多语言领导 Jim Laskey 提议将一个新的基于 JVM 的 JavaScript 实现 Nashorn 作为 OpenJDK 项目。Nashorn 是 Rhino 的后继,而 Rhino 则是目前的 JVM JavaScript 实现,它起始于 1997 年的 Netscape,并且经过一些细微的修改后随 2006 年 12 月的 Java SE 6 一同发布。Nashorn 则计划随 Java 8 一同发布并作为其一部分而存在。

Laskey 在其 OpenJDK 的项目提案中说到“Nashorn 的目标是在原生 JVM 上提供一个轻量级、高性能的 JavaScript”:

该项目的范围包括但不限于一个解析器 API(扫描 JavaScript 源代码)、一个编译器(将解析器中的抽象语法树 AST 转换为 JVM 字节码)及一个运行时(支持上述生成的字节码的执行)。该环境中 JavaScript 的执行将与 ECMA-262 5.1 一致,并且会随着标准的不断演进而适应于新的指南。

虽然使用了与 Rhino 相关的名字,但 Nashorn(德语的 rhinoceros)却是个全新的代码基,充分利用了 Java 7 的 InvokeDynamic 字节码指令。其实现要比 Rhino 小且快,这使得它更加适合于运行在嵌入式 / 移动设备上;比如说,它既能运行在 Beagle Board 上,也能运行在 Raspberry Pi 上。

Laskey 在去年 9 月的 JavaOne 上说到,团队正在研究其他 JavaScript 实现的性能,因此其性能应该能与现代浏览器一较高下。此外,Twitter 的 Sam Pullara 还介绍了他是如何使用 Nashorn 来渲染 Mustache.js 模板的。

一切都正常,我根本没有遇到过 Nashorn 的正确性问题。在性能方面,对于大多数颇具挑战的测试,Nashorn 要比 Rhino 快 20 多倍。

此外,NetBeans 团队已经在 Nashorn 基础之上完全重写了其 JavaScript 实现。对于有大量 JavaScript 文件需要扫描的项目来说,变化的结果就是 IDE 启动时间的大幅降低。

除了与 Rhino 相比性能上的提升外,Nashorn 相对于其他 JavaScript 实现来说的一个优势在于它可以访问众多的 Java 库,包括客户端的 JavaFX 及服务端的 JSP。为了支持这种交互,Nashorn 使用了 Dynalink ——基于 Apache 许可的开源元对象协议,构建在 InvokeDynamic 之上,由 Attila Szegedi 开发,他从 Twitter 加入了 Oracle。Dynalink 提供了一套约定以在程序执行环境中指定更高层次的对象操作,对于普通的 Java 对象它提供了一个链接器。

现在 Nashorn 提案已经有了一个专门的博客。当Nashorn 能够100% 兼容于ECMA-262 时,OpenJDK 项目的工作将会专注在性能以及通用性上。潜在的OpenJDK 合作者包括Twitter、IBM 与Red Hat。

查看英文原文: Nashorn Proposed as Replacement JavaScript Engine for OpenJDK

2013-01-09 02:181662
用户头像

发布了 88 篇内容, 共 263.9 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

极速体验SpringCloud Gateway

程序员欣宸

Java SpringCloud SpringCloud Gateway 9月月更

第56届世乒赛团体赛开幕!三思近900㎡ LED显示点燃赛事激情

电子信息发烧客

OptaPlanner场景和示例

积木思维

2022-09-30:以下go语言代码输出什么?A: true true false true false; B: true false false true false; C: true true

福大大架构师每日一题

Python之斐波那契数列的实现

芯动大师

Python 9月月更 斐波那契数列

14个你必须要知道的ubuntu快捷键

乌龟哥哥

9月月更

《MySQL入门很轻松》第4章:数据表中存放的数据类型

乌龟哥哥

9月月更

大数据开发应用场景解读

Jackchang234987

大数据 数据开发

Databricks Data Science&Engineering模块介绍

Jackchang234987

大数据 数据产品经理 数据产品 大数据开发 Databricks

Java中的悲观锁和乐观锁是什么意思?其分类依据是啥?

wljslmz

Java 乐观锁 悲观锁 9月月更

Python之鸡兔同笼

芯动大师

9月月更 Python语法 鸡兔同笼

面试官问我 JS 中 foreach 能不能跳出循环

茶无味的一天

JavaScript js foreach for

leetcode 513. Find Bottom Left Tree Value 找树左下角的值 (简单)

okokabcd

LeetCode 数据结构与算法

微信架构图

Johnny

#架构实战营

《MySQL入门很轻松》第5章:数据完整性及其分类

乌龟哥哥

9月月更

工业4.0时代IIoT存储面临哪些挑战

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

Spring Security 在 Servlet 的作用区域

HoneyMoose

从单机百万tpmc到分布式千万tpmc,GaussDB性能提升的3个关键技术剖析

乌龟哥哥

9月月更

(WebFlux)004、WebFilter踩坑记录

编号94530

Spring Boot WebFlux Reactor3 WebFilter

开发者有话说|我想给你讲一个故事

石云升

个人成长 9月月更

《MySQL入门很轻松》第2章:MySQL管理工具介绍

乌龟哥哥

9月月更

打破线上社交“不可能三角”,语音社交可以做到既要、又要、还要

擎声科技

音视频 sdk 语音社交 实时互动 擎声Qtt

给你一本武林秘籍,和KeeWiDB一起登顶高性能

腾讯云数据库

redis 腾讯云 NoSQL 数据库 腾讯云数据库 KeeWiDB

无线网络安全技术中的王牌标准:WPA到底是个什么东东?解决了什么问题?

wljslmz

网络安全 无线技术 9月月更 WAP

「产品运营」研发效能之DevOps平台如何运营?

laofo

DevOps cicd 研发效能 持续交付 工程效率

数据价值平台化输出:数据服务平台

Taylor

数据中台 接口管理 API接口管理 数据服务 数据服务平台

第1章:初识数据库与MySQL----数据库基本概念

乌龟哥哥

9月月更

字符串哈希

留白的艺术

新品速递|海泰边缘安全网关护航工控数据采集

电子信息发烧客

Python之简易计算器的制作

芯动大师

Python 9月月更 简易计算器

部署华为云DWS过程

乌龟哥哥

9月月更

Jim Laskey提议将Nashorn作为OpenJDK的JavaScript引擎_Java_Charles Humble_InfoQ精选文章