Oracle анонсировала экспериментальный проект OpenJDK для тестирования новых функций для Java.
Проект Valhalla для Java находится на ранней экспериментальной стадии, и он будет далеко в будущем – в прошлом JDK в 2016 году – до того, как какие-либо изменения в синтаксисе языка будут включены в Java. Предлагаемые первоначальные улучшения-это поддержка универсальных типов над примитивами и типов значений.
В анонсе проекта Брайан Гетц из Oracle описывает его как Oracle
“инкубационные площадки для проектов совместной разработки продвинутых языков и виртуальных машин, таких как Типы значений (http://cr.openjdk.java.net/~jrose/values/values-0.html)
и Родовая Специализация
(https://bugs.openjdk.java.net/browse/JDK-8046267). “
Гетц говорит, что, скорее всего, первые несколько раундов не будут выглядеть как окончательный результат, добавив:
“не думайте, что только потому, что прототип работает с искажением имен, или искажением файлов классов, или требует, чтобы оператор выполнял Танец Цыпленка, что это окончательный план – это просто целесообразный способ добраться до точки, где мы можем экспериментировать с чем-то осязаемым.”
Одна из областей, которую Oracle рассматривает для изменения, — это то, как Java обрабатывает универсальные типы. На данный момент аргументы универсального типа ограничены расширением объекта, что означает, что они не совместимы с примитивными экземплярами, если не используется бокс, что снижает производительность. Другими словами, вы не можете написать универсальную сортировку, которая работает с целыми числами или плавающими числами, не оборачивая их как объекты.
Предполагается, что Java будет поддерживать специализацию универсальных классов и интерфейсов при создании экземпляров с аргументами примитивного типа. Универсальная специализация-это функция, которую запросили многие разработчики и которая уже была добавлена в некоторые другие языки JVM.
Вторая основная идея, предложенная для Valhalla, — это типы значений. Описывая их в OpenJDK как “Коды, подобные классу, работают как int”, команда Valhalla в составе Джона Роуза, Брайана Гетца и Гая Стила говорит, что идея состоит в том, чтобы добавить поддержку небольших, неизменяемых типов значений без идентификации.
Разработчики смогут использовать их так, как если бы они были новым определяемым пользователем типом примитивов, добавленным в текущий список из восьми встроенных типов примитивов: byte, short, int, long, float, double, char и boolean. Команда Valhalla рассчитывает заимствовать большую часть механизмов определения и инкапсуляции из классов, что позволит пользователям легко и безопасно создавать новые структуры данных на основе значений. Они говорят:
“в частности, мы считаем, что полезно, как на уровне JVM, так и на уровне языка, рассматривать определения типов значений как специально помеченные, специально ограниченные определения классов.”
Если вы заинтересованы в отслеживании Valhalla, вы можете подписаться на список рассылки valhalla-dev.
Стоит иметь в виду запись в Википедии о Валгалле:
«Валгалла (от Древнескандинавский Вальхель «зал убитых») … половина тех, кто погибает в бою, отправляется в Валгаллу после смерти…»