
On 15/02/11 20:35, Daniel Fischer wrote:
Which makes me wonder: unwanted sharing of lists [1 .. n] or similar is a frequent cause of space leaks, so would it be possible to teach GHC to not share such lists (unless they're bound to a name to indicate sharing is wanted)?
In particular for enumerations [a .. b] of type [Int], [Integer] or similar, I'm pretty sure that the cost of recomputation is far outweighed by the memory consumption of sharing in almost all cases.
Compare with the heap profile graph output from this short program which uses a horrible data-dependency hack to force recomputation: main = do print $ length [(x,y) | x <- [(1 :: Int) .. 10000], y <- [(1 :: Int) .. 10000]] print $ length [(x,y) | x <- [(1 :: Int) .. 10000], y <- [x+1-x .. 10000]] The heap profile graph looks a little like this: ######## ######## ######## ######## ########_______ (Tested with ghc 6.12.3 -O2 on linux x86_64) Claude -- http://claudiusmaximus.goto10.org