guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: frames, stacks, traps, continuations, backtraces, oh my oh my.


From: Neil Jerram
Subject: Re: frames, stacks, traps, continuations, backtraces, oh my oh my.
Date: Sun, 28 Dec 2008 22:23:50 +0000

2008/12/22 Andy Wingo <address@hidden>:
> Hey folks,

Hi Andy!

I see that the following answers are now a bit late, but for
completeness anyway....

> Over the weekend I started to work on tidying up some loose ends in the
> vm branch. One of the big loose ends is the debugging story: getting
> good backtraces between interpreted and compiled code, etc. My mind is
> ajumble with code right now, but I figured I'd dump some observations,
> to see if they jog any neurons in anyone's head.
>
>  * make-stack with an outer cut that is inside vm-compiled code will not
>   find the outer cut, thus it returns no frames.

Not sure what you're saying here.  Was this just a bug statement at
the time you wrote this email?  Is it still the case (following your
"vm status update" email)?

>  * It is insane to have VM compilation affect the general debugging
>   interface -- the primitives that the we provide already (make-stack
>   and start-stack, operating either on the current or a captured
>   continuation) are a bit goofy, but they have well-defined and
>   sufficient semantics.
>
>  * Calling scm_backtrace() should show backtraces regardless of whether
>   the code is running interpreted or compiled.

Agree x2

>  * It is truly irritating to have to deal with stacks.[ch] and
>   debug.[ch].

I roughly remember that too.  What in particular though?

>  * It is a bit distressing to have to shoehorn my beautiful vm-frame
>   stuff into the old stack and debugging infrastructure. Perhaps things
>   can be made nicer on the C side.

Don't understand here, as I'd say the "old" infrastructure is OK.
Have things now worked out to your satisfaction?

>  * "Info frames" are what are contained in a #<stack> object; they are
>   copies of information from a real continuation. Backtraces rely on
>   this information only, not the live information.

Yes.  And I would assume that it's fairly clean to transform (or
interleave) VM frames into these.

>  * "Debug frames" are two things: (1) a chain of data structures on the
>   C stack, describing "frames" in a continuation; (2) Scheme objects
>   that point to those C structures. The Scheme objects only make their
>   way into scheme as the result of a "trap", a low-level hook run by
>   the evaluator. The latter are sometimes called debug objects.

Yes.  You may also see the phrase "cheap traps", which means using a
relatively lightweight debug object, and passing that out to Scheme,
instead of making a continuation and passing that out.  I removed the
non-cheap continuation option a few years back, on the grounds that
the trap code can use call/cc itself if it wants a full continuation.

(Also note that debug frames rely on a real on-the-stack alloca(), and
won't work with a heap-simulated one.)

>  * Debug frames aren't there if you aren't using the debugging
>   evaluator.

Yes, this is one of the differences between DEVAL and CEVAL.

>  * Debug objects (on the Scheme side) need to be cheap to create,
>   otherwise running code with traps enabled would be quite slow. For
>   that reason we can't operate on full continuations, given how
>   continuations are implemented.

Agreed.  See above.

>  * Perhaps apropos the former, did I mention that debug.h sucks?
>
>  * As yet unpushed, the VM has an abstraction similar to debug objects,
>   but more pleasant to work with. Since debug objects aren't used
>   except as arguments to make-stack, maybe I can avoid them entirely.

Does any part of the API expose what is inside a debug object?  As far
as I'm aware, they are really only a closure parameter from the trap
call to make-stack.  So if you have something "more pleasant", maybe
it will be fine just to redefine "debug object" to be that thing?

> Actually, the last point is convincing me. Also, the tea is convincing
> me to go to sleep. Perhaps finally the code can come together later this
> week.
>
> Thanks for listening, it's been helpful to me ;)

Better late than never, I hope!

     Neil




reply via email to

[Prev in Thread] Current Thread [Next in Thread]