nashorn on jdk 8 (adc2013)
DESCRIPTION
Brief introduction of Nashorn on JDK 8. Delivered at ADC 2013 (http://adc.alibabatech.org/), on July 14, 2013. Full version of slides coming soon.TRANSCRIPT
关于我
• 编程语言及虚拟机爱好者• 曾在淘宝和 Oracle 任职参与 Java 虚拟机
相关研发工作• 博客: http://rednaxelafx.iteye.com/• 微博: @RednaxelaFX
何为 Nashorn ?
何为 Nashorn ?
何为 Nashorn ?
何为 Nashorn ?
http://www.battletanks.com/images/Nashorn-1.jpg
何为 Nashorn ?
• Oracle 的 ECMAScript 5.1 实现• 运行于 Java 虚拟机上• 全新的代码, 100% Java 实现• OpenJDK项目 / JEP 174• GPLv2• 作为 JDK 的一部分随 JDK8 发布• 替代原本的 Rhino
为何 Nashorn ?
• 改造 Rhino ?• 优势:现成的实现,功能完整• 劣势:代码老旧,难以翻新
为何用 Java 实现 JavaScript ?
• 充分利用 Java 平台已有的资源• 成熟的 GC• 成熟的 JIT 编译器• 多线程支持• 丰富的标准库和第三方库
为何用 Java 实现 JavaScript ?
• JavaScript 的标准库语义与 Java 相似• 可以充分复用 Java 的标准库• number -> java.lang.Double (*)• string -> java.lang.String• boolean -> java.lang.Boolean• Date -> java.util.Date (*)• RegExp -> java.util.regex.Pattern (*)• null -> null• undefined -> ? (Undefined)
为何用 Java 实现 JavaScript ?
http://img.xgo-img.com.cn/9_500x375/8144.jpg
为何用 Java 实现 JavaScript ?
http://cdn2.carsdata.net/pics/Hyundai/hyundai-coupe-fx-05.jpg
为何用 Java 实现 JavaScript ?
http://encarsglobe.com/photo/md/ferrari-430/04/
Nashorn 的执行模型
• 纯编译,无解释器• 从 JavaScript 源码编译为 Java 字节码• 动态编译• 延迟编译( lazy compilation )
Nashorn 的执行模型
词法分析
语法分析
常量折叠
控制流 lowering
类型标注
值域分析 (*)
代码分离
类型固化
字节码生成
JavaScript 源码
抽像语法树( AST )
Java 字节码
编译器前端
编译器后端
* 当前尚未完整实现
Nashorn 的对象模型
function Point(x, y) { this.x = x; this.y = y;}
var p = new Point(2013, 42);
map
__proto__
context …
flags 0
spill null
arrayData
L0 x
L1 y
L2
L3
Key Getter Setter“x” x getter x setter“y” y getter y setter
map
__proto__
…
2013
42
EMPTY_ARRAY
Nashorn 的对象模型
function Point(x, y) { this.x = x; this.y = y;}
var p = new Point(1, 2);p.z = 3; p.a = 4; p.b = 5;p[0] = 6; p[1] = 7;
map
__proto__
context …
flags 0
spill
arrayData
L0 x
L1 y
L2 z
L3 a
Key Getter Setter“x” x getter x setter“y” y getter y setter“z” z getter z setter“a” a getter a setter“b” b getter b setter
map
__proto__
…
1
2
0 6
1 7
b
5
3
4
使用 Nashorn
• 命令行解释器• jjs / jrunscript
• 嵌入 Java 应用作为脚本使用• 唯一公有 API 是 JSR 223
( javax.script )• 系统脚本( shebang script )
Node.jar
• Java 服务器端的 JavaScript 平台• 正在不断研发中• 集成了下列技术• Node.js• Nashorn• Grizzly• Java 平台 API
参考资料
• Nashorn, Jim Laskey, JVM Language Summit 2011• CON5390 - Nashorn
: Optimizing JavaScript and Dynamic Language Execution on the JVM, JavaOne 2012• BOF6661 - Nashorn, Node, and Java
Persistence, JavaOne 2012
更多关于 JavaScript 引擎的讨论
• 请参考 HLLVM 群组的讨论帖• http://hllvm.group.iteye.com/group/topic/
37596
谢谢!