The classic paper "The Incremental Garbage Collection of Processes" (<a href="http://citeseer.ist.psu.edu/baker77incremental.html">http://citeseer.ist.psu.edu/baker77incremental.html</a>) describes "futures" and how particularly garbage collecting them when their pending result is no longer referenced. I've been playing with an implementation of futures in Concurrent Haskell (
<a href="http://haskell.org/haskellwiki/Reactive">http://haskell.org/haskellwiki/Reactive</a>), using MVars, and I'm stumped about how to GC non-winning threads in a race between futures ("parallel or"). I'm having winner kill loser, which seems to work fine, though is potentially dangerous
w.r.t locked resources. Still, the elegance of a GC-based solution appeals to me. Has anyone explored process GC ideas for Concurrent Haskell (or STM)?<br><br>Futures are implemented using Concurrent Haskell's MVars. I first tried using STM and TVars, simply using orElse to implement mappend for futures. However, I didn't see how to avoid nesting "atomically", which yielded a run-time error. If anyone has ideas about using STM & TVars for futures, I'd love to hear.
<br><br>Thanks, - Conal<br><br><br><br>