Фундаментальное ограничение состоит в том, что JVM не предоставляет хвостовые вызовы в своем байт-коде, и, следовательно, нет прямого способа для языка, основанного на JVM, предоставлять собственные хвостовые вызовы. Существуют обходные пути, которые могут достичь аналогичного эффекта (например, трамплин), но они приводят к огромным затратам на ужасную производительность и запутывание сгенерированного промежуточного кода, что делает отладчик бесполезным.
Таким образом, JVM не может поддерживать функциональные языки программирования производственного качества, пока Sun не реализует хвостовые вызовы в самой JVM. Они обсуждали это годами, но я сомневаюсь, что они когда-либо реализуют хвостовые вызовы: это будет очень сложно, потому что они преждевременно оптимизировали свои виртуальные машины перед реализацией такой базовой функциональности, и усилия Sun сосредоточены на динамических языках, а не на функциональных языках. 1003 *
Следовательно, существует очень веский аргумент, что Scala не является реальным функциональным языком программирования: эти языки считают хвостовые вызовы важной функцией с тех пор, как Scheme была впервые представлена более 30 лет назад.