Принциповим обмеженням є просто те, що JVM не надає хвостові дзвінки в своєму байтовому коді, і, отже, немає прямого способу для мови, побудованої на JVM, самому надавати хвостові дзвінки. Є обхідні шляхи, які можуть домогтися аналогічного ефекту (наприклад, батут), але вони стають серйозною ціною жахливої продуктивності та заплутують створений проміжний код, який робить налагоджувач марним.
Таким чином, JVM не може підтримувати жодних функціональних мов програмування, доки Sun не реалізує хвостові дзвінки в самому JVM. Вони обговорювали це протягом багатьох років, але я сумніваюся, що вони коли-небудь будуть виконувати хвостові дзвінки: це буде дуже важко, оскільки вони передчасно оптимізували свій VM перед тим, як реалізувати такі основні функціональні можливості, а зусилля Sun сильно орієнтовані на динамічні мови, а не на функціональні мови.
Отже, існує дуже вагомий аргумент, що Scala не є справжньою функціональною мовою програмування: ці мови вважали хвостові дзвінки важливою особливістю з моменту введення схеми вперше 30 років тому.