折叠的解释器塔 [pdf]
这篇论文提出了一种系统化方法,用于消除由多层解释器(如元循环求值器或语言虚拟机)堆叠带来的性能开销。作者展示了如何通过部分求值和编译技术,将堆叠的解释器层"折叠"为高效的目标代码,从而在保留模块化设计的同时获得接近原生的执行效率。该方法在多种解释器组合(包括类型系统、作用域规则和基于语言的虚拟机)上进行了实验验证,显著减少了运行时间。
背景速读
- 这篇论文来自 Purdue 大学的 Nada Amin 和 Tiark Rompf,发表于 2018 年顶级编程语言会议 POPL。核心问题是:当编程语言用解释器实现(即用语言 A 写一个解释器运行语言 B,再用语言 B 写一个解释器运行语言 C……)时,性能会逐层崩溃。作者提出一种叫做"凝合"(collapsing)的技术,将多层解释器自动融合成等效的单层实现,从而大幅提升效率。
- 这项工作在编程语言研究领域影响力很大,因为它直接挑战了"语言栈"的常见代价——从 Web 浏览器到科学计算,许多系统都有多层解释。文中还引出了"最后关头解释器"(final tagless style)等概念,是模块化编译技术的重要里程碑。