主要观点:介绍了 CPS(续传递风格)这一程序中间表示形式,用于函数式程序,在 SML 和 Scheme 等语言的编译器中使用,其效用源于对尾调用和非局部控制流的支持,也可作为优化目标。通过构建从类似 Scheme 的小语言到 CPS 的转换,介绍了 CPS 的规则和实现细节,包括对整数、操作、变量绑定、函数创建、分支等的处理,还提到了一些优化方法如常量折叠、β 归约等,以及从 CPS 生成可执行代码的几种方法,如生成 C 代码、使用 trampolines、One Big Switch 等,最后对相关工作和资源进行了列举和致谢。
关键信息:
- CPS 规则:函数/操作数参数必须是“平凡的”,函数调用不返回。
- Mini-Scheme 语言包含整数、操作、变量绑定、函数创建、分支等。
- cps 函数将表达式编译为 CPS,通过匹配不同的表达式形式进行处理。
- 优化方法包括常量折叠、β 归约等,需注意替换的范围和副作用。
- 从 CPS 生成可执行代码有多种方法,各有优缺点。
重要细节: - 生成函数调用时会添加延续参数,区分函数调用和延续调用的特殊形式。
- 处理
if
表达式时要注意延续的复制问题,可绑定名称避免指数级增长。 - 元延续可避免生成不必要的
cont
形式,优化代码生成。 - 不同的 CPS 到可执行代码的转换方法,如生成 C 代码、使用 trampolines 等的具体实现细节。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。