Why Object-Oriented Languages Need Tail Calls
Cook makes an important distinction between abstract data types and object-oriented programming, and argues that they have related but complementary characteristics. […] We extend one of his examples in order to make a completely different point: object-oriented programming languages need tail calls correctly implemented, not just as a “trivial and optional” optimization of the use of stack space that could be achieved by using iteration statements, but in order to preserve object-oriented abstractions.