9 @Babou 对最近一个问题的回答使我想起,我一次看过一篇关于数据流分析的等效性(就可以推断或证明的事实以及运行推理算法的时间复杂性)的论文,抽象解释和类型推断。 在某些子情况下(例如在前向上下文相关的过程间数据流分析与抽象解释之间),对我来说等效性是相对明显的,但对于其他比较而言,这个问题似乎更加微妙。例如,我不知道如何使用Hindley-Milner类型推断来证明可以通过对流量敏感的数据流分析来证明的某些属性。 有哪些开创性的参考文献讨论数据流分析,抽象解释和类型推断之间的等效性(或差异)? reference-request compilers type-inference program-optimization — 流浪逻辑 source
4 数据流分析和类型推断是抽象解释的特定实例。 数据流分析和抽象解释看起来很相似,因为它们都是关于计算固定点的。数据流分析通常具有有限高度的抽象域,以确保终止。一般而言,抽象解释不假定这样的抽象域。为了处理无限的高度域,抽象解释使用了加宽和缩小的技术。 事实证明,类型推断也与定点计算有关,尽管远非显而易见。这是一篇明确表明类型是抽象解释的论文:paper。基本上,类型被视为程序具体语义的抽象。例如,在Hindley-Milner类型系统中,类型的抽象域具有无限的高度,并且使用统一来计算(最一般的)类型实际上是在执行(非常不精确)加宽操作。 — 贝尔和平 source
4 Nielson,Nielson和Hankin 撰写的《程序分析原理》一书是了解这三种方法及其相关性的好地方。 我认为说数据流分析,抽象解释和类型推断是同一回事是不正确的。鉴于这三者起源于不同的社区,尽管有很多相似之处,而且可能比预期的要多,但也存在许多差异。 — 马丁·伯格 source
3 我认为它们基本相同。他们最初的目标是不同的,并且是由不同的计算机科学派别创造的。 数据流分析来自编译器工程部门,试图讨论它们的优化算法并证明其复杂性的上限等。 抽象解释来自计算机科学的形式,数学领域。这是一个更加正式的版本,对正确性有更多的兴趣,而对构建实际的编译器的兴趣则更少。 类型推断来自函数式编程的学术领域,该领域最初是使用编译器进行出色处理的工具。然后出现了一个想法,即类型可以不仅仅是“ int”或“ float”,还可以包括其他诸如经典数据流分析之类的东西。 — Lambdapower source