对于function as first class,必须使用控制流分析;对于OOP,更多的使用类型的信息。

如果我们将函数引入为值(从而引入高阶函数),那么在每个调用点,很难轻易确定哪个函数被调用。在面向对象的编程语言中,通过动态分派调用方法时也会遇到类似的挑战。控制流分析的任务是以保守的方式近似表示程序的跨过程控制流,也称为调用图,用于这种类型的程序。调用图显示了每个调用点可能被调用的函数,表示为从表示调用点的AST节点或CFG节点到可能被调用的函数的调用边。通常,我们的目标是过度近似,意味着调用图可能包含太多的调用边,但不会太少。因此,调用图为随后执行跨过程数据流分析提供了基础,例如常量传播分析。

10.1 lambda演算的闭包分析

10.2 Cubic算法

10.3 函数作为变量的TIP

10.4 面向对象语言的控制流