Optimizations for mutable structures?

Simon Marlow simonmar at microsoft.com
Wed Dec 7 09:15:24 EST 2005


On 07 December 2005 13:38, Malcolm Wallace wrote:

> Jan-Willem Maessen <jmaessen at alum.mit.edu> writes:
> 
>>    - Fetch elimination for imperative reads:
>>      writeIORef r e >> acts >> readIORef r
>>  === writeIORef r e >> acts >> return e
> 
> This transformation is valid only on single-threaded systems.
> If there is any possibility of an IORef being shared across threads,
> you are out of luck.

(assuming 'acts' doesn't modify 'r').

No, Jan's transformation is correct even in a multithreaded setting.  It
might eliminate some possible outcomes from a non-deterministic program,
but that's ok.  There's no requirement that all interleavings according
to the semantics have to be implemented.  This is a hard property to
state precisely, indeed we gave up trying to in the concurrency/FFI
paper: http://www.haskell.org/~simonmar/papers/conc-ffi.pdf, see Section
6.1.

Cheers,
	Simon


More information about the Glasgow-haskell-users mailing list