Tail calls are not simply an optimization, they are semantic.<p>edit: Not understanding the downvotes here.  In Scheme, for example, tail calls are part of the semantics of the language.  We know that when we place a recursive call in tail position that we&#x27;re really describing a linear process.  If such a thing is just an optional optimization, programmers can&#x27;t rely on it in the same way.