避免捕获且卫生的程序变换(含证明)
编程语言
2014-04-24 v1
摘要
基于抽象语法树的程序变换会因引入变量捕获而损害引用完整性。当生成程序中的变量声明意外遮蔽了变量引用的预期目标时,就会发生变量捕获。现有的变换系统要么不能保证避免变量捕获,要么会妨碍变换的实现。我们提出了一种名为 name-fix 的算法,该算法通过系统地重命名变量,自动消除生成程序中的变量捕获。name-fix 由程序绑定结构的图表示引导,并需要变换源语言和目标语言的名称解析算法。name-fix 具有通用性,适用于任何支持名称起源追踪的变换系统中的任意变换。我们验证了 name-fix 的正确性,并确定了一类 name-fix 能提供卫生性的有趣变换。我们展示了 name-fix 在实现避免捕获的代入、内联、lambda 提升以及两种领域特定语言编译器中的适用性。
引用
@article{arxiv.1404.5770,
title = {Capture-Avoiding and Hygienic Program Transformations (incl. Proofs)},
author = {Sebastian Erdweg and Tijs van der Storm and Yi Dai},
journal= {arXiv preprint arXiv:1404.5770},
year = {2014}
}
备注
In Proceedings of European Conference on Object-Oriented Programming (ECOOP) 2014