其他参考斯大林编译器如何粗暴地优化?

Jul*_*les 21 compiler-construction scheme computer-science compilation

JM Siskind的研究声明指出:

Stalin是Scheme的优化编译器,它执行整个程序的静态分析,并使用该分析的结果生成极其高效的代码.斯大林利用大量的静态分析技术.它执行一种新形式的多变量流分析,使用迭代单变量流分析来执行流向分裂:克隆程序的专用副本和将目标分配到这些克隆的每个调用点.它使用流量分析的结果执行寿命分析,逃逸分析,点分析和必须别名分析.这些分析支持一种新颖的轻量级闭包转换形式,它消除了大多数闭包槽,使用诸如可变全球化和本地化之类的技术,压缩静态后链,并且通常从程序中消除大多数闭包.它还使用上述分析来支持基于流的区域存储管理,其中运行时垃圾收集在每个抽象值和每个程序点的基础上被静态分配和释放替换.它还使用Screamer开创的技术扩展来执行流向轻量级CPS转换,以支持极其高效的一流延续.最后,它支持流向内联和低级表示选择,以在每个抽象值和每个程序点的基础上选择标记的实现(或非实现),标记检查和标记分派.这消除了大多数运行时标记,标记检查,标记,标记剥离,标记调度,装箱和从程序中取消装箱.这些分析和优化允许斯大林生成极其高效的代码,其性能优于所有其他Scheme编译器,范围在2到100之间,特别是对于数字密集型代码.斯大林经常生成的代码优于手写的c和Fortran代码.

我能够找到以下关于闭包/函数调用实现的非常有趣的论文:Flow-Directed Lightweight Closure Conversion.我还通过电子邮件向作者询问了关于其他主题的论文,这些论文被提到将在封闭转换论文中写出:

Siskind,JM 2000a.流向轻量CPS转换.在筹备.

Siskind,JM 2000b.流向多变量.在筹备.

Siskind,JM 2000c.流向定向表示选择.在筹备.

Siskind,JM 2000d.流向存储管理.在筹备

不幸的是,他从来没有写过那些论文.我的问题是:是否有任何替代或相关的论文涉及这些主题?我非常有兴趣了解Stalin(或其他编译器)如何编译如垃圾收集,动态类型,支持第一类函数甚至是第一类延续的Scheme这样的高级语言,可以静态编译为如此高效的代码.

erj*_*ang 4

R. Kent Dybvig 的出版物列表

\n\n

编辑:对 Chez Scheme 的一个很好的介绍是他的ICFP 演示以及随之而来的论文。有些论文专门与方案相关(宏、多值、延续),有些论文的适用范围更广泛(使用延迟保存、急切恢复和贪婪 Shu\xef\xac\x84ing 进行寄存器分配)。

\n

  • Stalin 的优化远远超出了 Chez 正在做的事情或其他任何事情。主要技巧始于它是一个“整体”程序优化器——因此,它可以做正常编译器做不到的事情。(但最终的语言也受到严格限制,因为您无法单独编译代码的不同部分。) (4认同)
  • 是的,我做到了,有些标题显然与优化编译器无关,而其他标题可能与优化编译器相关,但我不确定从哪里开始。我并不是想刻薄,我真的很好奇。您认为有一篇论文是一个好的开始吗? (2认同)