Hacker News new | ask | show | jobs
by ikfmpwdsoz 2825 days ago
I was under the assumption that that was called sibling call optimization, and TCO referred exclusively to recursive calls. Was that just an LLVM-ism, or did I also get that wrong?
2 comments

Nope, if that's what LLVM says then they're wrong here. Tail call optimization has nothing inherently to do with recursion. Rather, "tail call" means that the call is the last (tail) thing the caller does. "Sibling call" doesn't really make a lot of sense to me either, since most calls are sibling calls, and most of them can't be optimized away like that.

For reference, back in 2001, Microsoft's .NET CIL specs already had [1] a "tail call" prefix, described as follows:

> Tail call prefix [indicates] that a method should relinquish its stack frame before executing a method call.

(LLVM's first release was in 2003.)

[1] https://www.ecma-international.org/publications/files/ECMA-S...

TCO is a bigger concept than just recursion. Applying it to non-recursive tail calls makes code more efficient because it doesn't create a superfluous stack frame. But it's harder to debug because -- it doesn't create a superfluous stack frame.