On Sun, 15 Nov 2009, Isaac Dupree wrote:
Henning Thielemann wrote:
It compiles, but I have not tested any program that uses it. Even with simplest examples using storablevector it depends largely on fortune whether they run or crash. So no chance to make reliable statements about something more complex.
hmm, I looked at the code. I don't quite understand lazy ST, but I don't think that version you made is correct. The writes (and reads) really may not be re-ordered based on which data is demanded when.
You are right. I only thought about newSTRef's for which the order is not important. Yes, we also have to assert that writes are in order and reads remain between adjacent writes. Once I solved a similar problem in the 'lazyio' package. I defined IO actions in a way, that triggering one action also requires to execute all previous actions. This should also work for ST but it is somehow overly strict. E.g. do a <- newSTRef 'a' b <- newSTRef 'b' writeSTRef a 'c' writeSTRef b 'd' can be re-ordered to do b <- newSTRef 'b' writeSTRef b 'd' a <- newSTRef 'a' writeSTRef a 'c' That is, maximum laziness would be achieved, if there would be a state-thread for every reference.
participants (1)
-
Henning Thielemann