[MLton] callcc and space use
Vesa Karvonen
vesa.a.j.k at gmail.com
Wed Jan 23 07:16:54 PST 2008
On Jan 23, 2008 3:03 PM, Daniel Spoonhower <spoons at cs.cmu.edu> wrote:
[...]
> I attached a small(-ish) example. It copies and reverses a list of
> reals. Toward the end of execution there are more than 4000 live cons
> cells in the heap, though the length of the input list is only 75.
BTW, how did you get the numbers?
Glancing at the programs, I quickly spotted one place where you might
have a "leak" (I don't yet understand the whole program), and this
differs between the two versions of the program you sent. First the
possibly leaky version:
<--- from simple.sml --->
fun loop () =
let
val w = deq ()
val () = w ()
handle Continue ws => (app enq ws; loop ())
in
loop ()
end
<--- from simple.sml --->
Consider the two calls to loop () above carefully. (Note that the
first one of the calls isn't at a tail position.)
Here is the non-leaky version:
<--- from simple2.sml --->
fun loop () =
let
val w = deq ()
val () = w ()
handle Continue => ()
in
loop ()
end
<--- from simple2.sml --->
Here the only call to loop () is at a tail position.
In case you haven't already, reading
http://mlton.org/References#BentonKennedy01 might be interesting.
-Vesa Karvonen
More information about the MLton
mailing list