Possibly Pythonic Tail Call Optimization (TCO/TRE)

Marko Rauhamaa marko at pacujo.net
Tue Jul 14 13:27:25 EDT 2015


Ian Kelly <ian.g.kelly at gmail.com>:

> On Tue, Jul 14, 2015 at 2:33 AM, Marko Rauhamaa <marko at pacujo.net> wrote:
>> The programmer shouldn't be controlling tail call optimizations.
>
> The programmer controls it regardless.
>
>     return foo()  # TCO
>
>     result = foo()  # No TCO
>     return result  # No TCO

Not necessarily. Compile this function with gcc ("gcc -S -O2 atoi.c"):

========================================================================
int atoi(const char *str, int n)
{
    if (str && *str)
        n = atoi(str + 1, n * 10 + *str - '0');
    return n;
}
========================================================================
(Example modified from <URL: http://stackoverflow.com/questions/34125/wh
ich-if-any-c-compilers-do-tail-recursion-optimization#220660>.)

You'll see that the generated code is tail-call-optimized.


Marko



More information about the Python-list mailing list