斯大林(Stalin)是Scheme的优化编译器,它执行全程序静态分析,并使用该分析结果生成非常高效的代码。斯大林利用了大量静态分析技术。它执行一种新形式的多变量流分析,该分析使用迭代的单变量流分析来执行流定向拆分:克隆过程的专用副本以及按目标在每个调用点分配此类克隆。它使用流分析的结果执行生命周期分析,逃逸分析,指向分析和必须别名分析。这些分析支持一种新颖形式的轻量级闭包转换,它使用可变的全球化和本地化等技术消除了大多数闭包插槽,压缩了静态反向链,并且通常从程序中消除了大多数闭包。它还使用以上分析来支持基于流定向的基于区域的存储管理,其中基于每个抽象值和每个程序点将运行时垃圾回收替换为静态分配和释放。它还使用Screamer率先推出的技术扩展功能,执行流定向的轻量级CPS转换,以支持极其高效的一流续航。最后,它支持流定向的内联和低级表示选择,以基于抽象值和每个程序点选择标记的实现(或不实现),标记检查和标记分发。这消除了大多数运行时标记,标记检查,标记,标记剥离,标记分派,装箱和从程序中取消装箱。在运行时垃圾回收中,根据抽象值和每个程序点将其替换为静态分配和释放。它还使用Screamer率先推出的技术扩展功能,执行流定向的轻量级CPS转换,以支持极其高效的一流续航。最后,它支持流定向的内联和低级表示选择,以基于抽象值和每个程序点选择标记的实现(或不实现),标记检查和标记分发。这消除了大多数运行时标记,标记检查,标记,标记剥离,标记分派,装箱和从程序中取消装箱。在运行时垃圾回收中,根据抽象值和每个程序点将其替换为静态分配和释放。它还使用Screamer率先推出的技术扩展功能,执行流定向的轻量级CPS转换,以支持极其高效的一流续航。最后,它支持流定向的内联和低级表示选择,以基于抽象值和每个程序点选择标记的实现(或不实现),标记检查和标记分发。这消除了大多数运行时标记,标记检查,标记,标记剥离,标记分派,装箱和从程序中取消装箱。使用Screamer首创的技术扩展,以支持极其有效的一流续航。最后,它支持流定向的内联和低级表示选择,以基于抽象值和每个程序点选择标记的实现(或不实现),标记检查和标记分发。这消除了大多数运行时标记,标记检查,标记,标记剥离,标记分派,装箱和从程序中取消装箱。使用Screamer首创的技术扩展,以支持极其有效的一流续航。最后,它支持流定向的内联和低级表示选择,以基于抽象值和每个程序点选择标记的实现(或不实现),标记检查和标记分发。这消除了大多数运行时标记,标记检查,标记,标记剥离,标记分派,装箱和从程序中取消装箱。这些分析和优化使Stalin可以生成非常有效的代码,其效率要比其他所有Scheme编译器高出2到100之间,尤其是对于数字密集型代码。斯大林经常生成的性能优于手写的c和Fortran代码。
我能够找到以下有关闭包/函数调用实现的非常有趣的论文:流定向轻量级闭包转换。我还通过电子邮件发送给作者,询问有关其他主题的论文,这些主题在闭包转换论文中被提及:
Siskind,JM 2000a。流导向的轻量级CPS转换。在准备。
Siskind,JM 2000b。流定向多方差。在准备。
Siskind,JM 2000c。流导向表示选择。在准备。
Siskind,JM,2000年。流导向的存储管理。在准备
不幸的是,他从来没有写过那些论文。我对您的问题是:是否有涉及这些主题的替代或相关论文?我非常有兴趣了解斯大林(或其他编译器)如何编译诸如Scheme这样的高级语言,该方案可以进行垃圾回收,动态类型化,支持一流的功能,甚至一流的延续,也可以静态地编译为这种高效的代码。尽管有关流量分析的论文非常丰富,但没有关于使用这种分析的结果进行上述优化的论文。