On 03/01/2012 16:54, Tristan Ravitch wrote:

This might be the expected behavior but I'll ask anyway.  I have what
seems to be a legitimate stack overflow (due to excessive recursion
and not the evaluation of a big thunk).  The stack trace from -xc only
shows about 13 calls on the stack (with each function that is called
only appearing once).

Is it by design that functions only appear once?

Yes, and this is the area where things might change. We have to somehow make the stack finite, otherwise the data structure storing the stack would fill up the memory. Here are a few options:

 A) On a recursive call, truncate the stack to the previous instance
    of the call

 B) On a recursive call, do not push anything on the stack

 C) On a recursive call, elide some previous entries in the stack
    (e.g. replacing them with "...")

Currently we're doing a variant of A, which is good for profiling because it means that the cost of a function call is always attributed to a stack with that function at the top. However, A doesn't satisfy all the properties we need, so certain compiler transformations aren't valid. The only option that has the right properties is B, but that isn't so useful for profiling.

C is more useful for stack traces, because there is more information towards the top of the stack - the last few calls are correct, but information deeper down the stack is lost. This is what Tristan Allwood used in his "Finding the Needle" paper. Unfortunately C doesn't have the right transformational properties either.

Cheers,
        Simon

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to