La limitación fundamental es simplemente que la JVM no proporciona llamadas de cola en su código de bytes y, en consecuencia, no hay una forma directa de que un lenguaje construido sobre la JVM proporcione llamadas de cola por sí mismo. Hay soluciones que pueden lograr un efecto similar (por ejemplo, trampolín) pero tienen el grave costo de un rendimiento terrible y ofuscar el código intermedio generado, lo que hace que un depurador sea inútil.
Por lo tanto, la JVM no puede admitir ningún lenguaje de programación funcional con calidad de producción hasta que Sun implemente las llamadas finales en la propia JVM. Lo han estado discutiendo durante años, pero dudo que alguna vez implementen llamadas de cola: será muy difícil porque han optimizado prematuramente su VM antes de implementar una funcionalidad tan básica, y el esfuerzo de Sun se centra fuertemente en lenguajes dinámicos en lugar de lenguajes funcionales.
Por lo tanto, existe un argumento muy fuerte de que Scala no es un lenguaje de programación funcional real: estos lenguajes han considerado las llamadas finales como una característica esencial desde que Scheme se introdujo por primera vez hace más de 30 años.