Отказаться от поддержки хвостового вызова в JVM для каждого языка? - PullRequest
2 голосов
/ 23 февраля 2011

Хотя не похоже, что оптимизация хвостового вызова когда-либо будет добавлена ​​в качестве обычной техники оптимизации, особенно после покупки Sun, технически невозможно позволить языкам, работающим на ВМ, самим решать, испускает ли их компилятор tailcall инструкция в байт-коде?

E. г. Java, Groovy может решить не использовать инструкцию, в то время как более функциональные языки, такие как Scala или Clojure, могут ее испускать, а виртуальная машина HotSpot будет оптимизировать только те, которые отмечены tailcall?

1 Ответ

4 голосов
/ 26 февраля 2011

Да, это технически возможно - фактически есть экспериментальный патч от Arnold Schwaighofer для OpenJDK , который делает именно это, хотя не так просто применить патч и собрать, как это не так.В настоящее время эта информация не обновляется.

Явная команда хвостового вызова имеет преимущества по сравнению с прозрачной оптимизацией вызовов функций в хвостовой позиции с помощью JVM, поскольку JVM может проверить, что то, что вы указали в качестве хвостового вызова, действительносм. это сообщение в блоге хвостового вызова Джона Роуза для объяснения некоторых проверок, которые могут быть сделаны.

Я думаю, что будущее JVM не Java, и я надеюсь, что кто-тосо временем и талантом толкает хвост, призывает JVM вперед.

...