<p>I saw this quote on the question: <a href="https://stackoverflow.com/questions/105710">What is a good functional language on which to build a web service?</a></p>

<blockquote>
  <p>Scala in particular doesn't support tail-call elimination except in self-recursive functions, which limits the kinds of composition you can do (this is a fundamental limitation of the JVM).</p>
</blockquote>

<p>Is this true?  If so, what is it about the JVM that creates this fundamental limitation?</p>

This post:
Recursion or Iteration?
might help.
In short, tail call optimization is hard to do in the JVM because of the security model and the need to always have a stack trace available. These requirements could in theory be supported, but it would probably require a new bytecode (see
John Rose's informal proposal
).
There is also more discussion in
Sun bug #4726340
, where the evaluation (from 2002) ends:
I believe this could be done nonetheless, but it is not a small task.
Currently, there is some work going on in the
Da Vinci Machine
project. The tail call subproject's status is listed as "proto 80%"; it is unlikely to make it into Java 7, but I think it has a very good chance at Java 8.