arXivDaily arXiv每日学术速递 周一至周五更新
arXiv周末暂无论文更新,休息一下吧,周末愉快~~
arXiv 1504.08033cs.PL
收藏

抽象机器的自动抽象解释

Automating Abstract Interpretation of Abstract Machines

James Ian Johnson

摘要:

静态程序分析对于人们编写程序所使用的任何程序设计语言来说都是一种有价值的工具。脚本语言在世界上的流行表明,程序设计语言解释器相对容易编写。这些语言的用户抱怨他们没有能力分析他们的代码,因此程序设计语言分析器并不容易编写。本文研究了一种从传统解释器生成抽象解释器的系统方法,称为抽象抽象机。由于技术、理论和语用问题,抽象口译员很难发展。技术问题包括工程数据结构和算法。我表明,适度和简单的变化,抽象机器的数学表示的结果,在1000倍更好的运行时间-只是几秒钟的中等大小的程序。在理论领域,抽象会使正确性难以确定。我提供了证明技术,通过将计算能力留给外部因素:分配来证明抽象计算的常规、下推和堆栈检查下推模型的正确性。即使我们不信任证明,我们也可以针对测试套件具体地运行模型,以更好地信任它们。在务实的领域,我表明,抽象的抽象机器的系统过程是自动化的。我开发了一种类似于其他语义工程语言的用于表达抽象机器的元语言。该语言的特殊之处在于它提供了一个抽象分配的接口。语义保证,如果分配是有限的,那么语义是一个可靠的和可计算的近似的具体语义。

英文摘要:

Static program analysis is a valuable tool for any programming language that people write programs in. The prevalence of scripting languages in the world suggests programming language interpreters are relatively easy to write. Users of these languages lament their inability to analyze their code, therefore programming language analyzers are not easy to write. This thesis investigates a systematic method of creating abstract interpreters from traditional interpreters, called Abstracting Abstract Machines. Abstract interpreters are difficult to develop due to technical, theoretical, and pragmatic problems. Technical problems include engineering data structures and algorithms. I show that modest and simple changes to the mathematical presentation of abstract machines result in 1000 times better running time - just seconds for moderately sized programs. In the theoretical realm, abstraction can make correctness difficult to ascertain. I provide proof techniques for proving the correctness of regular, pushdown, and stack-inspecting pushdown models of abstract computation by leaving computational power to an external factor: allocation. Even if we don't trust the proof, we can run models concretely against test suites to better trust them. In the pragmatic realm, I show that the systematic process of abstracting abstract machines is automatable. I develop a meta-language for expressing abstract machines similar to other semantics engineering languages. The language's special feature is that it provides an interface to abstract allocation. The semantics guarantees that if allocation is finite, then the semantics is a sound and computable approximation of the concrete semantics.

机构、总结、中文摘要均由AI分析而来,可能存在错误,请以论文正文为准。

↑