equivalent of EXPLAIN PLAN with GHC?

Joshua Haberman joshua at reverberate.org
Sun Aug 2 03:45:57 EDT 2009


Hi Thomas, thanks for the reply!

Thomas DuBuisson <thomas.dubuisson <at> gmail.com> writes:
> Josh,
> 
> In general you'll find the haskell-cafe (haskell-cafe <at> haskell.org) to
> be a more lively place for this type of discussion

Good to know, I just wasn't sure if it was appropriate for
GHC-specific questions.

> but since we're
> here I might as well mention that memory use of a Haskell function is
> one of the hardest things to gain an understanding about.

Hmm, that's unfortunate.  :(

> > main = print (show (sum [x | x <- [3..999], x `mod` 3 == 0 ||
> > x `mod` 5 == 0]))
> > I want
> > to know if the list was ever actually constructed in memory.
> 
> For such a simple program I suggest you test with lists of various lengths:

Cool, thanks for the example.

>           94,604 bytes allocated in the heap

Is there any way I could find out what these 94kb of RAM were
allocated for?  This seems high -- my entire program's working set
is <6kb.  That's if you construct all my lists in full, including
both the [3..999] list (which has 997 elements) and the list
comprehension list (which has 466).  This assumes 32-bit integers.

Allow for some memory to format the string, and you still aren't within
an order of magnitude of 94kb.  I guess I'm holding Haskell to the
standard of a compiled language rather than interpreted one, and
assuming it doesn't need to allocate heap space for the code.

Any idea how I could dig into this?

> > The C it produced
> > with '-fvia-C -C' was totally unreadable
> 
> Deprecating the via-C compilation path has been discussed - hopefully
> no one ever suggested it as a useful path for human inspection.

I do still wonder if there isn't an intermediate form that *is*
suitable for human inspection.

Thanks,
Josh



More information about the Glasgow-haskell-users mailing list