现代程序结构中控制依赖与切片的新基础
1. 引言
控制依赖这一概念是许多程序分析和转换技术的基础,广泛应用于程序理解、调试、部分求值、编译器优化等领域。直观来说,如果语句 n2(通常是条件语句)控制着语句 n1 在程序执行过程中是否会被执行或跳过,那么 n1 就控制依赖于 n2。
然而,现有的控制依赖和切片定义及计算方法在应用于现代程序结构时存在一些问题。现代程序结构大量使用异常处理,并且越来越多地支持设计为无限运行的反应式系统。具体问题如下:
- 经典控制依赖定义的局限性 :经典定义基于具有唯一结束节点的程序控制流图(CFG),无法直接应用于具有多个结束节点或无结束节点的 CFG。对于多个结束节点的情况,通常需要进行预处理,将其转换为具有单个结束节点的 CFG,但对于无结束节点的反应式程序,选择合适的结束节点来确定所需的控制依赖关系往往不明确。
- 现有切片正确性定义的不足 :现有定义要么适用于具有终止执行轨迹的程序,要么未明确切片转换是否保留被切片程序的终止行为,因此无法应用于设计为无限执行的反应式程序。
尽管存在这些困难,研究人员和从业者仍在对不满足上述限制的程序应用切片转换。但预处理转换会增加额外的开销,使程序转换和可视化工具变得混乱,并且在安全应用和软件模型检查等对活性/非终止属性有要求的应用中,忽略终止问题是不可行的。
本文旨在重新审视控制依赖和切片的基础问题,提出适用于现代程序结构的控制依赖定义和算法。具体贡献如下:
- 提出新的控制依赖定义,可直接应用于可能没有结束节点或结束节点不唯一的控制流图,避免了麻烦的预处理转换。
- 证明这些定义
超级会员免费看
订阅专栏 解锁全文

977

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



