Имеет JSR-335 специальную поддержку в JVM? Повышение для функциональных языков на основе JVM?
Говорят, что JSR-335 скоро появится вместе с Java 8. Он обеспечивает поддержку замыканий и методов виртуального расширения. Интересно, есть ли какая-то конкретная поддержка для этого на уровне JVM? Если да, можем ли мы надеяться на повышение скорости в функциональных языках на основе JVM, которые обеспечивают замыкания и функции, подобные методам расширения (такие как черты или импликации в scala)?
Редактировать: читая эту презентацию оракула на Java 8 Брайана Гетца, кажется, что: - замыкания не требуются - методы виртуального расширения требуют особой поддержки JVM.
Может ли это означать, что в scala некоторые из последствий и черт могут быть реализованы более эффективно?
2 ответа
Я не думаю, что методы расширения могут быть использованы для реализации признаков - реализация метода не может вызвать super
на них (afaik - я могу ошибаться), и семантика переопределения была бы другой. Кроме того, он не охватывает поля, а только методы.
JVM ничего не может сделать, чтобы помочь с последствиями, потому что с ними нет врожденной проблемы. Это нормальные экземпляры, передаваемые как нормальные параметры. Их поиск замедляет работу компилятора, но JVM не может помочь с этим.
Я не вижу какой-либо из этих функций, которые помогают с чем в Scala, но это почти спорный вопрос, на самом деле. Scala все еще генерирует байт-код JVM 1.5 с файлами классов JVM 1.5. Вы можете включить байт-код JVM 1.6, что не имеет большого значения. В Scala 2.10 файлы классов 1.6 будут включены на экспериментальной основе.
Причина этого довольно проста: Java 1.7 запускает 1,5 файла классов с 1,5 байт-кодом, но не наоборот. Еще много людей используют старые версии Java, и это вряд ли изменится.
Так что я не вижу никаких функций Java 1.8 в радаре, если они не дают огромного преимущества. И даже тогда они, скорее всего, будут доступны для кода, скомпилированного с помощью Scala, но не в самой библиотеке Scala. Аналогично, если это не дает огромного преимущества, я не вижу библиотек, доступных в обеих версиях.
Я думаю, что скорость Scala уже очень близка к Java. Это динамически типизированные языки jvm медленные (такие как Groovy). И на самом деле JDK 7 выпустил новую функцию invokedynamic с целью улучшения этих динамических языков jvm: http://java.sun.com/developer/technicalArticles/DynTypeLang/