中文

无需类型分析的 JavaScript 程序过程间类型特化

编程语言 2015-11-11 v1

摘要

诸如 Python 和 JavaScript 之类的动态类型编程语言将类型检查推迟到运行时。虚拟机(VM)实现可通过消除冗余的动态类型检查来提升性能。然而,类型推断分析通常代价高昂,且涉及编译时间与所得精度之间的权衡。这导致了日益复杂的多层虚拟机架构的产生。惰性基本块版本控制是一种简单的 JIT 编译技术,能有效从关键代码路径中移除冗余类型检查。这一新颖方法在传播上下文相关类型信息的同时,惰性地在运行时生成基本块的类型特化版本。该方法无需使用代价高昂的程序分析,也不受传统类型分析精度限制的限制。本文扩展了惰性基本块版本控制,以跨函数调用边界过程间地传播类型信息。我们在 JavaScript JIT 编译器中的实现表明,在 26 个基准测试上,过程间基本块版本控制平均消除的类型标签测试多于静态类型分析在不借助代码变换情况下所能达到的水平。平均而言,94.3% 的类型标签测试被消除,带来了最高 56% 的加速。我们还展示了我们的实现能够在多个基准测试上,在执行时间和编译时间两方面均优于 Truffle/JS。

关键词

引用

@article{arxiv.1511.02956,
  title  = {Interprocedural Type Specialization of JavaScript Programs Without Type Analysis},
  author = {Maxime Chevalier-Boisvert and Marc Feeley},
  journal= {arXiv preprint arXiv:1511.02956},
  year   = {2015}
}

备注

10 pages, 10 figures, submitted to CGO 2016