Хвостовой вызов в Java и C#?
Я читал о Clojure и обнаружил, что в текущей версии Java не поддерживает хвостовые вызовы, и что люди генерировали исключения для имитации хвостовых вызовов в JVM, в любом случае, похоже, что люди делают какие-то безумные штуки. Так что это заставило меня задуматься о том, как в C# звонят хвостом, те же проблемы?
2 ответа
Код CLR будет вызывать вызов в некоторых случаях, но не в других - это зависит от JIT.
Смотрите запись в блоге Дэвида Бромана и Шри Борде тоже.
Компилятор C# в настоящее время не генерирует хвостовой вызов IL, но иногда JIT все равно это делает.
В некоторых случаях возможна рекурсия хвоста на JVM. Например, Scala требует эффективной реализации базовой хвостовой рекурсии (см. Этот пост в блоге, ищите языковые мелочи № 8, только цитату, которую я смог найти только сейчас). Поговаривают и исследуют вопрос о добавлении дополнительной поддержки, так же, как Invoke Dynamic и другие функции, предназначенные для не-Java языков.
Также довольно часто говорят о подобных проблемах на Java Posse.
И да, я знаю, что это совсем не ответ на ваш вопрос...