Jeff Clites <[EMAIL PROTECTED]> wrote:

> But there's one wiggle: If you've created a continuation previously
> (and it still exists), then any call has to preserve the frame

Well, that's what continuations are doing. They do preserve the frame,
which they have taken a snapshot of. And they preserve any frames up the
call chain. This is needed and implemented and working.

The concept of a return continuation (which recycles itself and the
frame it returned from) doesn't have an influence on tail calls.
Whenever you see a continuation "on the surface", it's one that is
preserving the frames and the context. Eventually there isn't even a
RetContinuation object but just a pointer to the calling frame. But
whenever you can see a continuations it's a real one - at least then,
when the big cheese doesn't see this change (returncc opcode) as a change
to calling conventions anymore "not now" ;)

So a tailcall can even silently reuse the return continuation and return
to the caller's caller.
AFAIK the only problem with tailcalls and tail-recursive functions is to
prperly detect them in some optimizer, or to convert to such tailcalls.

> JEff

leo

Reply via email to