[MLton] callcc and space use
    Daniel Spoonhower 
    spoons at cs.cmu.edu
       
    Wed Jan 23 06:06:12 PST 2008
    
    
  
Matthew Fluet wrote:
>   fun f x =
>      let val y = ... x ... in
>        (* no more occurrences of x *)
>        callcc (fn k => (enq (fn () => ... k ...);
>                         raise Continue))
>        ; raise Foo
>      end
> 
> and the captured continuation will necessarily throw an exception that 
> leaves g (and makes g's y dead), we can't propagate that kind of 
> liveness information down the stack.
That's OK: there is no "Foo" in my case.  In other words, the 
continuation is meaningful, I just want to suspend it for a while.
In any case, in trying to get a smaller example, I've learned something: 
In the code that attached to my earlier email, the exception carried a 
list of thunks.  If the exception is nullary (and the thunks are queued 
before the exception is raised) then my space leak goes away.  The 
difference essentially comes down too:
 >        callcc (fn k => (enq (fn () => ... k ...);
 >                         raise Continue))
vs
 >        ... handle Continue ws => app enq ws
 > ...
 >        ... callcc (fn k => (raise Continue [fn () => ... k ...]))
(Where the second version leaks.)  I attached another version of my 
example that uses a nullary exception instead.
I will keep investigating.  Still, any hints are appreciated.
Thanks,
--djs
-------------- next part --------------
A non-text attachment was scrubbed...
Name: simple2.sml
Type: application/smil
Size: 1851 bytes
Desc: not available
Url : http://mlton.org/pipermail/mlton/attachments/20080123/4bf1563f/simple2.smi
    
    
More information about the MLton
mailing list