[Haskell-cafe] Help understanding sharing
Patrick.Surry at portraitsoftware.com
Mon Apr 14 22:39:53 EDT 2008
I'm new to Haskell and trying to get a better understanding of sharing
(and ultimately memoization). I've read SOE and various of the
tutorials, as well as browsing around the wiki and old mailing lists.
Most of the examples of memoization seem to revolve around Fibonacci,
and are based either on the fact that a list defined within the function
will get shared between calls, or on doing some 'unsafeIO' (which I
haven't dug too deeply into.)
I've read various discussions that explain why function calls are
generally not automatically memoized (e.g. f x gets recalculated rather
than looked up based on the prior result). The rationale for that (big
space leak and no guarantee of improved performance) makes sense.
(Though I did like one poster's suggestion of a compiler pragma that
hints that a particular function should be memoized.)
I've seen other discussions that suggest that lists are always shared
while in scope (so the fibs trick works). But is that just a feature of
the standard compilers, or is it somewhere mandated in the Hakell spec
(I don't see anything obvious in the Haskell Report tho haven't read it
cover to cover)?
The wiki page http://www.haskell.org/haskellwiki/Performance/Strictness
says laziness == non-strictness + sharing but again nowhere gives a set
of rules that guarantees what will be shared and what won't. I was
hoping I might find it here: http://www.haskell.org/haskellwiki/Sharing
but no such luck. Or are there no guarantees and you just have to know
how your particular compiler works??
DISCLAIMER: This e-mail is intended only for the addressee named above. As this e-mail may contain confidential or privileged information, if you are not the named addressee, you are not authorised to retain, read, copy or disseminate this message or any part of it. If you received this email in error, please notify the sender and delete the message from your computer.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe