Fri Aug 21 02:52:51 PDT 2009 [email protected]
* Fix Trac #3437: strictness of specialised functions
Ignore-this: 24345ff251a517e540a9666a78ed8176
'lilac' helpful pin-pointed a space leak that was due to a specialised
function being insufficiently strict. Here's the new comment in SpecConstr:
Note [Transfer strictness]
~~~~~~~~~~~~~~~~~~~~~~~~~~
We must transfer strictness information from the original function to
the specialised one. Suppose, for example
f has strictness SS
and a RULE f (a:as) b = f_spec a as b
Now we want f_spec to have strictess LLS, otherwise we'll use call-by-need
when calling f_spec instead of call-by-value. And that can result in
unbounded worsening in space (cf the classic foldl vs foldl')
See Trac #3437 for a good example.
The function calcSpecStrictness performs the calculation.
M ./compiler/specialise/SpecConstr.lhs +44
View patch online:
http://darcs.haskell.org/ghc/_darcs/patches/20090821095251-1287e-dec3cf6e5242ddc9cd5d16a69747395e5e14e86a.gz
_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc