[Python-Dev] Re: Proper tail recursion (original) (raw)

Chris King colanderman at gmail.com
Fri Jul 16 15:23:15 CEST 2004


On Fri, 16 Jul 2004 00:52:07 -0700, Josiah Carlson <jcarlson at uci.edu> wrote:

If unlimited recursion were allowed, perhaps limited tracebacks (first and last 500 stack frame traces), RLE tracebacks (though a clever programmer could easily destroy the generator with fewer than 64 functions, but we probably shouldn't do that), or combined limited and RLE tracebacks would be sufficient. What do I mean by an RLE traceback?

I thought of doing RLE tracebacks, but compression fails in the case of cooperative recursive calls. I think perhaps along with the sys.setrecursionlimit(None) option you suggest, developers should be allowed to turn recursive tracebacks off entirely in the case of cooperative recursive calls.

The other problem with RLE tracebacks is that a traceback object also keeps a reference to each function's locals (by virtue of keeping a reference to its frame obejct). Throwing this info out makes RLE tracebacks no more useful to debuggers than having no traceback at all.

Keeping the first and last X frames in a traceback seems reasonable, but this would similarly cripple debuggers (what happens if the bug is in the (X+1)th frame?). Implementation would also be complicated.

IMHO it should be an all-or-nothing deal: either the programmer turns tail-call optimizations on to nullify memory uses, or turns them off to facilitate debugging.



More information about the Python-Dev mailing list