Хвостовой вызов в Java и C#?

Я читал о Clojure и обнаружил, что в текущей версии Java не поддерживает хвостовые вызовы, и что люди генерировали исключения для имитации хвостовых вызовов в JVM, в любом случае, похоже, что люди делают какие-то безумные штуки. Так что это заставило меня задуматься о том, как в C# звонят хвостом, те же проблемы?

2 ответа

Решение

Код CLR будет вызывать вызов в некоторых случаях, но не в других - это зависит от JIT.

Смотрите запись в блоге Дэвида Бромана и Шри Борде тоже.

Компилятор C# в настоящее время не генерирует хвостовой вызов IL, но иногда JIT все равно это делает.

В некоторых случаях возможна рекурсия хвоста на JVM. Например, Scala требует эффективной реализации базовой хвостовой рекурсии (см. Этот пост в блоге, ищите языковые мелочи № 8, только цитату, которую я смог найти только сейчас). Поговаривают и исследуют вопрос о добавлении дополнительной поддержки, так же, как Invoke Dynamic и другие функции, предназначенные для не-Java языков.

Также довольно часто говорят о подобных проблемах на Java Posse.

И да, я знаю, что это совсем не ответ на ваш вопрос...

Другие вопросы по тегам