写点什么

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:181687
用户头像

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

关注

评论

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

Docker容器中一定要避免的10件事

xcbeyond

Docker 避坑

自从用完Gradle后,有点嫌弃Maven了!速度贼快!

xcbeyond

maven Gradle

架构师训练营作业 (第七周)

默默

罪羊树——暴力也是种优雅

烫烫烫个喵啊

算法 二叉树 替罪羊 平衡二叉树

两个指针缩小范围算法,CQRS 命令查询职责分离模式 John 易筋 ARTS 打卡 Week 09

John(易筋)

ARTS 打卡计划

使用HSDB 查看jvm内存

引花眠

SpringBoot 使用 jasypt 对配置项进行加密

hungxy

Java springboot jasypt

JVM系列之:详解java object对象在heap中的结构

程序那些事

Java JVM GC JOL

应届生求职面试真的有那么难吗

xcbeyond

面试 应届生

架构师训练营 -- 第七周学习总结

花花大脸猫

如何保证消息不丢失?处理重复消息?消息有序性?消息堆积处理?

Bruce Duan

消息队列 保证消息不丢失 处理重复消息 消息有序性 消息堆积处理

ARTS 05 - 使用 Ecto.Migration 来做数据库迁移

jerry.mei

学习 算法 ARTS 打卡计划 函数式编程 Elixir

Mybatis二级缓存,你确定要用么?

xcbeyond

mybatis 二级缓存 一级缓存

LeetCode 565. Array Nesting

liu_liu

算法 LeetCode

架构师训练营——请简述 CAP 原理

WW

性能测试

满山李子

极客大学架构师训练营

ARTS打卡 第8周

引花眠

ARTS 打卡计划

IDEA 插件: EasyCode 一键生成所需代码

Bruce Duan

idea插件 easycode 生成代码

week7 总结 性能测试

Geek_z9dmvw

写一个 web 性能压测工具

WW

MinIO 简介和搭建一个对象存储服务

耳东@Erdong

Minio store Object store

JDK1.8新特性(四):函数式接口

xcbeyond

新特性 函数式编程 JDK1.8 JDK1.8新特性

Apache BeanUtils和Spring BeanUtils剖析

Bruce Duan

BeanUtils 浅拷贝和深拷贝

LeetCode 144. Binary Tree Preorder Traversal

liu_liu

算法 LeetCode

什么?还没有自己的域名?

北漂码农有话说

JDK1.8新特性(五):Stream,集合操作利器,让你好用到飞起来

xcbeyond

stream 集合 新特性 JDK1.8 JDK1.8新特性

MySQL 大表优化方案

Bruce Duan

MySQL优化

记一次西安thoughtworks的面试经历

xcbeyond

面试 thoughtworks

分布式锁用 Redis 还是 Zookeeper?

xcbeyond

redis zookeeper 分布式锁

MyBatis几种好用的写法

Bruce Duan

MyBatis标签

技术革新产业变革新动能

CECBC

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