上周,WebKit 开发团队向外正式宣布他们正在为 WebKit 的 JavaScript 引擎开发一个新解释器--SquirrelFish。根据 WebKit 官方博客,SquirrelFish 的速度比之前的解释器快 1.6 倍”。
与之前的解释器使用遍历语法树的实现方式不同的是,SquirrelFish 的实现采用字节码。
遍历语法树实现方式存在的高代价问题,在 SquirrelFish 字节码引擎中基本都不存在。首先,一个字节码流能够精确描述执行程序所需的操作,编译成字节码实际上隐性地跳过了不相关的语法结构。其次,字节码调度程序只是一个简单地从内存中直接读取,转而间接调度分支程序的过程。因此,执行字节码指令要比访问语法树节点快得多。第三,由于不再需要语法树,解释器无需继续在语法树节点间传送执行状态。
解释器使用字节码之后能够直接从字节码解释的所有的优化中获益匪浅,这也意味着 SquirrelFish 的速度还会继续得到提升。
在解析器使用字节码之后,我们目前实现的编译时优化有: - 常量折叠(constant folding)
- 更强的拷贝传播
- 类型推断——包括精确和推测两种方式
- 基于表达式上下文的特化——尤其是 void 和 boolean 上下文
- 窥孔优化(peephole optimization)
- 逃逸分析 (escape analysis)
SquirrelFish 团队特别对那些在同一领域工作的人们表示了感谢,正是他们的研究成果激发了 SquirrelFish 的开发灵感。
SquirrelFish 的设计很大程度上来自于高效虚拟机领域的一些最新研究成果,其中包括 M. Anton Ertl 教授、David Gregg 教授等人以及 Lua 编程语言的开发者们的研究。
查看英文原文: WebKit Team Announces SquirrelFish, a Bytecode Based JavaScript Interpreter
评论