高阶程序环境等价性分析:从控制流到形状分析
1. 抽象与具体状态空间
抽象状态空间(图 1 中的 ˆΣ)与具体状态空间的结构平行。在这些域中,我们采用自然偏序,例如 ve ⊔ ve′ = λˆb. ve(ˆb) ∪ ve′(ˆb)。
绑定环境(BEnv)作为机器状态和闭包的组成部分,是环境问题所涉及的环境。在语义中,绑定环境将变量映射到绑定。绑定 b 是为每个接收值的变量实例创建的纪念令牌,例如在 k - CFA 中,绑定是变量名与绑定时间戳的配对。值环境 ve 跟踪与每个绑定关联的可表示值(D),可表示值 d 是一个闭包。
在控制流分析(CFAs)中,绑定作为环境的原子组件,扮演着指针分析中地址的角色。我们的最终目标是推断抽象绑定背后具体值之间的关系。例如,我们希望能够证明在某些时间集上变量 v 的绑定,在值环境下,与在其他时间集上变量 x 的绑定相等。在纯 λ - 演算中,绑定之间唯一明显的关系是相等和不相等。
在 CFA 理论中,时间戳也被称为不太直观的轮廓。具体和抽象状态空间都未定义时间戳和绑定的精确结构。绑定的选择决定了分析的多态性。时间戳以某种方式编码执行历史,因此在抽象下,其结构决定了上下文敏感性中的上下文。
具体和抽象状态空间通过参数化的二阶抽象映射 αη : Σ → ˆΣ 相连,其中参数 η : (Addr → Addr) ∪ (Time → Time) 对绑定和时间进行抽象:
αη(call, β, ve, t) = (αη(V ), αη(β), αη(ve), η(t))
αηBEnv(β) = λv.η(β(v))
αηVEnv
超级会员免费看
订阅专栏 解锁全文
2万+

被折叠的 条评论
为什么被折叠?



