- Cong, Youyou and Osvald, Leo and Essertel, Grégory M and Rompf, Tiark
builds on top of [Maurer…2017]
- add a control operator to eliminates certain redundant rewrites
- treat non-returning and non-escaping aspects of continuations separately
- selective CPS translation of IR, which erases control operators while preserving the meaning and typing of programs
Thus, we change the spectrum of available options from “CPS yes or no” to “as much or as little CPS as you want, when you want it.”
- this paper comes from experience implementing MiniScala compiler
our experiment shows that a subsequent CPS pass may have a positive impact on the overall performance of the compiler.
- Functional compilers have to do CPS translation anyway (when targeting CFG-based IRs in SSA-form—e.g., LLVM), so for each optimization you can decide whether to run it before or after CPS.
1st-class values never refer to 2nd-class values
- 1st-class values are heap-allocated
- 2nd-class values are kept on the stack