抽象机的系统抽象
Systematic Abstraction of Abstract Machines
摘要:
我们描述了一个派生的方法,抽象的解释,产生新颖的和透明的声音静态分析时,适用于高阶和命令式程序设计语言完善的抽象机器。为了证明的技术和支持我们的要求,我们转换的CEK机Felleisen和弗里德曼,Krivine的机器的懒惰的变种,和堆栈检查CM机克莱门茨和Felleisen到抽象的解释自己。由此产生的分析约束时序的程序事件,预测返回流和堆栈检查行为,并近似的流量和评估的需要参数。对于所有这些机器,我们发现,一系列众所周知的具体的机器重构,加上存储分配的延续技术,导致机器抽象到静态分析简单地通过绑定他们的商店。我们证明了该技术的规模统一,允许静态分析现实的语言功能,包括尾部调用,条件,副作用,异常,一流的延续,甚至垃圾回收。为了缩小形式主义和实现之间的差距,我们将数学翻译为运行Haskell代码,用于我们方法的初始开发。
英文摘要:
We describe a derivational approach to abstract interpretation that yields novel and transparently sound static analyses when applied to well-established abstract machines for higher-order and imperative programming languages. To demonstrate the technique and support our claim, we transform the CEK machine of Felleisen and Friedman, a lazy variant of Krivine's machine, and the stack-inspecting CM machine of Clements and Felleisen into abstract interpretations of themselves. The resulting analyses bound temporal ordering of program events; predict return-flow and stack-inspection behavior; and approximate the flow and evaluation of by-need parameters. For all of these machines, we find that a series of well-known concrete machine refactorings, plus a technique of store-allocated continuations, leads to machines that abstract into static analyses simply by bounding their stores. We demonstrate that the technique scales up uniformly to allow static analysis of realistic language features, including tail calls, conditionals, side effects, exceptions, first-class continuations, and even garbage collection. In order to close the gap between formalism and implementation, we provide translations of the mathematics as running Haskell code for the initial development of our method.
机构、总结、中文摘要均由AI分析而来,可能存在错误,请以论文正文为准。