On Feb 15, 2006, at 10:53 PM, John Meacham wrote:

So, I finally decided that jhc needs real arrays, but am running into an
issue and was wondering how other compilers solve it, or if there is a
general accepted way to do so.
...
now, the problem occurs in newAT__

newAT__ :: Int -> AT a -> Array__ a
newAT__ n (AT a1) = a1 (prim_newAT__ n)
                            ^ this gets floated out as a CAF.

Yes, you need to have some construct in the language which can't be floated out. When you implement runST / unsafePerformIO you quickly learn that you can't rely on data dependency alone (though you'll get lucky a surprising proportion of the time if you try).

In phc, due to our pH heritage we had a set of compiler primitives which were known to be unfloatable. We were otherwise shockingly generous about floating things around (most of the other limitations got switched off in Haskell mode and only kicked in when you were compiling pH, which let you stick imperative stuff in without monads).

-Jan-Willem Maessen
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to