CWS paper
Stephen Weeks
MLton@sourcelight.com
Mon, 4 Dec 2000 09:36:08 -0800 (PST)
> Stephen knows this stuff better than I, but I know that we talked a lot to
> Richard about his experiences with full CPS conversion and I know that the
> notion of using CPS to express the intra-procedural flow was from him. At
> the time I was arguing for the advantages of CPS (over direct style) and I
> remember showing an example from Shiver's thesis where top-level procedures
> were transformed into continuations (because they always were called with the
> same continuation). I think that Stephen put contification into MLton in
> response to that. (Although it might have waited until he saw that this was
> going to be required for nested loops, as in matrix multiplication.)
That all sounds right. I remember the most annoying problem that we had with
the direct style IL was that we were allocating tuples for code like the
following:
val (x, y) = if ... then (a, b) else (c, d)
This was absolutely killing us in some benchmarks. We could have gone to some
variant of a direct style IL that allowed a "flat" tuple to be returned in the
branches of the if, but it was so much easier to go to CPS with multi-argument
continuations and do:
fun L (x, y) = ...
if ... then L (a, b) else L (c, d)