I wrote:
This "CSE-makes-it-worse" property strikes me as "interesting". Has anyone worked on characterizing CSE space leaks (and avoiding CSE in those cases)?

and Simon replied:
You might find chapter 23 "The pragmatics of graph reduction" in my 1987 book worth a look. It gives other examples where CSE can be harmful.

There are some great examples there. Specifically, 23.4.2 "Excessive Sharing" (viewable at http://research.microsoft.com/~simonpj/papers/ slpj-book-1987/PAGES/405.HTM) gives a neat example, the powerList function.

In short, it contrasts two definitions.  The first uses sharing:

powerList []     = [ [] ]
powerList (x:xs) = pxs ++ map (x :) pxs
                   where pxs = powerList xs

and a space-efficient one (that does more reductions):

powerList []     = [ [] ]
powerList (x:xs) = (powerList xs) ++ map (x :) (powerList xs)

... when running length(powerList [1..20]).

But my original question was whether this problem is considered "interesting", etc. As Simon points out above, its an issue that has existed for at least 20 years, but Simon also wrote for GHC bug #947 (which looked like a related issue):

I don't know any way to solve this problem automatically. But I do think it should be under your control.

To me, problems that Simon doesn't know how to solve are by definition at least a little interesting, but probably likely to be rather hard... :-)

    Melissa.

P.S. GHC bug #947 can be viewed at http://hackage.haskell.org/trac/ ghc/ticket/947 (Simon's bandaid for GHC bug #947 was -fno-cse.)

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to