

What is tail call optimization (2008)? - wicknicks
http://stackoverflow.com/questions/310974/what-is-tail-call-optimization

======
ww520
For a long time, I assumed the recursive tail call optimization was a really
smart optimization done by the compiler to transform a normal recursive call
into a tall call. I was trying to figure out how a compiler could do that.

Then later I learned that the optimization part is really done by human to
transform the recursive call into a tail call. The "optimization" done by the
compiler is relatively trivial in reusing the stack frame for the last
function call.

~~~
Drbble
<http://www.owlnet.rice.edu/~comp210/96spring/Labs/lab09.html> (search for
""omatic".) The author seems to use automatic" to mean "mindless human",
though, not "mindful computer"

------
pantaloons
As always SICP has the answers[1], and helped me shift from a "production rule
that transforms slow code to be faster" mindset towards a "implementation
detail of the compiler that ensures it doesn't create unnecessary state" one.
It's no more an optimization than explicitly not filling code with NOP's is.

[1] <http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-34.html>

~~~
jlongster
SICP is such a great book. If anyone is interested in the last chapter, I just
implemented the compiler which output the assembly code needed for explicit
control evaluation.

<https://github.com/jlongster/outlet-machine>

------
tikhonj
I think calling it an "optimization" is unfair. You don't call while loops
that run in constant space an optimization, do you?

Without support for proper tail calls, a large range of otherwise valid
recursive programs does not work. So, in a very real sense, supporting proper
tail recursion changes the semantics of the language, letting you certain
programs more easily.

~~~
pwpwp
I prefer _tail-call elimination_.

~~~
tikhonj
This seems a little confusing--the tail call isn't really eliminated _per se_
, it just behaves differently in terms of stack space. Semantically, it's
still a call, just one that does not have any unnecessary additional overhead.

------
kylec
Neat, that top answer is mine. And yes, it does borrow quite generously from
the first chapter of SICP, which is the canonical source for that kind of
info. Still, it's nice to see something I wrote coming up again. I'm glad it's
helping people.

------
cygx
Shameless advertisement: A new answer for those of us preferring imperative
languages: <http://stackoverflow.com/a/9814654/48015>

