Новости Java #3

• По просьбам читателей на сайт minijug.ru был добавлен feed в формате Atom. Это сделано для тех, кто предпочитает узнавать о новых публикациях через агрегатор новостных лент, а не через Telegram-канал. Адрес feed здесь.

• Java 16 теперь во второй фазе Rampdown, а значит на одну ступень ближе к релизу, который по плану должен произойти 16 марта.

• В компилятор Java было внесено несколько изменений в отношении preview API. Preview API – это один из трёх типов preview feature в Java, наряду с preview language feature и preview VM feature. Preview API разделены на две большие группы: нормальные (normal) и рефлективные (reflective). Нормальные также подразделяются на неотъемлемые (essential), удобные (convenient) и автономные (standalone). Однако для javac важно только разделение на нормальные и рефлективные. Главные изменения javac следующие:

1. Аннотация @PreviewFeature перенесена из пакета jdk.internal в пакет jdk.internal.javac, и в неё добавлен флаг reflective, который заменил старый флаг essentialAPI. Этот новый флаг как раз и поможет компилятору отличать рефлективные preview API от нормальных.

2. Рефлективные preview API можно использовать без флага компилятора --enable-preview, а нормальные – только с флагом.

3. При использовании класса, который использует preview feature, теперь выдаётся предупреждение (например, если использован sealed-класс из какой-нибудь библиотеки). Но это предупреждение можно подавить через @SuppressWarnings("preview").

4. Классы помечаются как зависящие от preview feature, только если это действительно необходимо (такие class-файлы имеют специальную минорную версию 65535, например 61.65535 для Java 17). Если класс не использует ни одной preview language feature (ни прямо, ни косвенно), ни одной preview VM feature и ни одного нормального preview API, то он компилируется в обычный (не-preview) class-файл. Другими словами, если из preview features использовать только рефлективные preview API, то такие программы можно будет запускать без флага --enable-preview, даже если они скомпилированы с флагом --enable-preview.

Эти изменения в javac будут работать только начиная с Java 17.

• Опубликован новый черновик JEP: Primitive Objects (Preview), в котором описывается, как в Java планируется внедрить примитивные объекты. Примитивные объекты – это объекты, которые не имеют идентичности, то есть при их копировании получается объект, неотличимый от оригинального. Такие объекты могут передаваться напрямую и легко встраиваться (в другие объекты/массивы/стек), что снижает накладные расходы на их использование и делает их более эффективными, чем объекты с идентичностью.

Новый черновик JEP – это возможно первая детальная публичная спецификация, которая стала результатом многолетних исследований, множества встреч экспертов и обсуждений, проведённых по value-типам в рамках проекта Valhalla. В ходе проекта было сделано несколько прототипов, несколько раз значительно менялась концепция, а сами value-типы дважды переименовывались: сначала в inline-классы, а потом в примитивные классы.

• В блоге JetBrains вышел новый выпуск «Java Annotated Monthly», где собрано огромное количество ссылок на новости, статьи, тьюториалы и прочие материалы о Java и связанных темах.

• Вышла новая сборка Loom, основанная на JDK 17+5.

• Вышла Scala 2.12.13.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2024
Feed
Table of JEPs