过程间稀疏条件类型传播

主要观点:为 Ruby 等动态语言构建有效编译器需精确类型信息,本文展示一个小 Ruby 子集的过程间类型分析,可用于程序优化,此分析非通常的类型推断引擎或检查器,能追踪函数间数据流,识别shout的调用者等,还介绍了静态分析(如静态单赋值形式 SSA)、稀疏条件常量传播(SCCP)、过程间 SCCP 及对象和方法查找等,通过生成折磨测试来评估其扩展性,最后总结并推荐相关阅读。
关键信息

  • Ruby 代码中变量类型难确定,添加类型注解作用有限,需编译器自行追踪类型。
  • 介绍 SSA 形式,能保证变量单一定型,分析时需处理“时间”状态。
  • SCCP 利用类型信息探索控制流图,只分析相关分支,可用于过程间分析。
  • 过程间 SCCP 需增量构建调用图,1 调用点敏感能提高精度但减慢分析,还有上下文敏感等其他类型敏感。
  • 静态分析要跟踪类和实例变量类型,可选择字段敏感方法,处理GetIvarSetIvar的关系。
  • 生成折磨测试来评估分析扩展性,有含类和不含类的程序测试,结果表明分析较可行。
    重要细节
  • 示例代码如shout函数展示类型不确定性,Ruby 继承导致类型签名含义复杂。
  • 解释类型晶格概念,各元素从Empty开始递增,不同类型在晶格中有特定位置和关系。
  • 过程间 SCCP 从应用入口点开始分析,创建调用边,处理参数合并和类型推导。
  • 折磨测试生成有特定结构的调用图和函数,包括含类和不含类的情况,评估分析性能。
阅读 7
0 条评论