
On Wed, 23 Oct 2013 08:57:55 +0000, Simon Peyton-Jones
Gergely
Edward has it right. Functional programs allocate a lot of intermediate stuff. ((a+b)*c-d) allocates two intermediate Integers and discards them pretty soon afterwards. GHC's code generator and garbage collector are good at both allocation and gc of young dead objects.
Thanks for the confirmation.
Using malloc/free would require a finaliser-style interface, which is significantly less efficient. That might matter a lot for an arithmetic-intensive program, and not at all for one where Integer arithmetic was incidental.
Do we have benchmarks for this in nofib? If I do some mockups, can I believe what (specific tests from) nofib says? Or does researching for a replacement first includes the task of writing a benchmark suite?
However, you could perfectly well imagine a third package (alongside integer-gmp and integer-simpl), let's call it integer-gmp-malloc.
Actually it's not clear to me, how would you implement the non-malloc integer-gmp as a package? Can haskell packages integrate with the GC that deep?
See also http://ghc.haskell.org/trac/ghc/wiki/ReplacingGMPNotes
Please do record the information or insights you get on a GHC wiki page!
Yes, I've definitely read through those kind of wiki articles. I try to only ask stuff that is not documented there. If I figure out anything in addition, I'll document, thanks. Gergely