đź“–Compiling without continuations
- authors
- Maurer, Luke and Downen, Paul and Ariola, Zena M and Peyton Jones, Simon
- year
- 2017
- url
- https://dl.acm.org/doi/pdf/10.1145/3062341.3062380
1. Introduction
adding join point to direct-style functional intermediate language
based on adding join points to GHC
continues Appel1992, Flanagan…1993, and Kennedy2007
“could be extend ANF in some way, to get all the goodness of direct style and the benefits of CPS? […] yes!”
contributions:
extend ANF with join points
how to infer which ordinary bindings are in fact join points (contification)
recursive join points open up an unexpected optimization opportunity for fusion
4. Contification: inferring join points
“contification” = “continuation demotion”
contification can be performed on a known function if every call to the function is a saturated tail call
8. Why not use continuation-passing style?
There are many similarities between this work and Kennedy2007: join points are continuations; Kennedy separates continuations and ordinary bindings (
let
vsletcont
), and call to continuation and call to function (f k h x
vsk x
).Pros of direct style:
direct style is easier to read and reason about
CPS encodes order of evaluation but direct style does not (more important in a call-by-need language)
some transformations are harder in CPS (e.g., common sub-expression elimination)