A new module for performing tail-call elimination
Terry Reedy
tjreedy at udel.edu
Fri Jul 17 15:47:19 EDT 2015
On 7/16/2015 3:45 PM, Marko Rauhamaa wrote:
>
> Nobody seemed to notice that I just posted a fairly typical tail call
> function:
Because non-recursive tail calls are completely normal. Example:
return len(self.children)
Even tail operations like
return a + b
are tail calls if rewritten as
return a.__add__(b)
(usually but not always equivalent) or rewritten as
return operator.add(a, b)
(always equivalent) or compiled by an implementation as an equivalent
internal function call.
It happens to be that CPython implements calls to symbol operator
functions by putting the bodies of such functions into a C switch inside
a while loop. It this compiles operator symbols into bytecodes that
cause a jump to the corresponding code.
--
Terry Jan Reedy
More information about the Python-list
mailing list