On Nov 11, 2004, at 11:24 AM, Dan Sugalski wrote:

At 11:16 AM -0800 11/11/04, Jeff Clites wrote:
On Nov 11, 2004, at 9:44 AM, Michael Walter wrote:

On Thu, 11 Nov 2004 12:30:16 -0500, Dan Sugalski <[EMAIL PROTECTED]> wrote:

Even further, it's necessary for some languages
(Scheme)/paradigms (loop by recursion) that a "tailcall" is not just a
hint but mandatory.

I think that actually doesn't matter. Even in the case where we think we can't do a full tail call optimization (because of a continuation that's been taken), we can still actually remove the calling frame from the call stack--we just can't immediately re-use the register frame. That satisfies the Scheme requirement, I would think. You can still do unbounded recursion, just that GC may need to run to clean up call frames.

I only skimmed the earlier parts of this, but continuations shouldn't affect tail calls at all.

You should read the thread then.

If this is from some side effect of call speed optimization (I remember seeing some discussion of stack allocation of call frames or something, but I don't recall if it was before or after I said we weren't optimizing this stuff right now) then we need to rip out those optimizations.

Tail call optimization *is* and optimization.... That's what the whole feature is.


And there's a difference between a pure optimization (which increases speed at the cost of design), and an architectural feature which improves speed.

JEff



Reply via email to