Языки программирования

Выпущена версия Java 23

Выпущена версия Java 23

В апреле 2024 года вышла Java 22. Теперь, спустя всего 6 месяцев, вышла версия 23, которая является STS-релизом с большим количеством функций в статусе предварительной версии.

Этот выпуск включает в себя двенадцать JEP:

455: Примитивные типы в паттернах, instanceof и switch (предварительный просмотр)
466: API для работы с файлами классов (второе превью)
467: Комментарии к документации в формате Markdown
469: Векторный API (восьмой инкубатор)
473: Сборщики потоков (второе превью)
471: Утратить методы доступа к памяти в sun.misc.Unsafe для удаления
474: ZGC: режим генерации по умолчанию
476: Декларации импорта модулей (предварительный просмотр)
477: Неявно объявленные классы и основные методы экземпляров (третье превью)
480: Структурированный параллелизм (третье превью)
481: Скопированные значения (третий просмотр)
482: Гибкие тела конструкторов (второе превью)

В основном это превью, и только две функции завершены: комментарии к документации Markdown и
переход на ZGC: Generational Mode по умолчанию. Давайте рассмотрим наиболее заметные изменения, начиная с функций, находящихся в стадии завершения.

Комментарии к документации в формате Markdown

Это довольно простое изменение. Она позволяет использовать Markdown при написании комментариев к Javadoc, чтобы сделать документацию более удобной для чтения.

ZGC: Поколенческий режим по умолчанию

Переключили режим по умолчанию сборщика мусора Z (ZGC) на генерационный, так как было решено, что поддержка негенерационного ZGC замедляет разработку новых функций.

JEP 455: Примитивные типы в шаблонах, instanceof и switch

Согласование шаблонов, хотя и было уже реализовано, имело ограниченную поддержку использования примитивных типов. Поэтому JEP 455 предлагает расширить согласование шаблонов, включив в него и примитивные типы, что означает, что функции instanceof и switch смогут работать с такими типами данных даже во вложенных контекстах.

Еще одна важная особенность - JEP 471: Утратить методы доступа к памяти в sun.misc.Unsafe.
Хотя Java безопасна для памяти, во многих случаях разработчикам требуется прямой низкоуровневый доступ, и для этого они используют sun.misc.Unsafe, использование которого, по меньшей мере, проблематично. Это связано с тем, что он может превратить безопасный язык в рассадник утечек памяти и других ошибок. Теперь в 471 интерфейс помечен как устаревший и подлежит удалению. Но чем он будет заменен? API Foreign Function & Memory, доступным с версии 22.

473: Сборщики потоков (второй предварительный просмотр)

Stream::gather(Gatherer) - это новая промежуточная операция потока, которая обрабатывает элементы потока, применяя определенную пользователем сущность, называемую сборщиком. С помощью операции gather мы можем создавать эффективные, готовые к параллельной работе потоки, реализующие практически любую промежуточную операцию. Stream::gather(Gatherer) является для промежуточных операций тем же, чем Stream::collect(Collector) является для терминальных операций.

Вторая предварительная версия расширяет Stream API для поддержки пользовательских промежуточных операций. Это позволит потоковым конвейерам преобразовывать данные таким образом, который нелегко реализовать с помощью существующих встроенных промежуточных операций.

И, наконец, JEP 477: Неявно объявленные классы и основные методы экземпляров (третья превьюшка).

Это третья предварительная версия функции, которая была представлена еще в JDK 21 с JEP 445: Unnamed Classes and Instance Main Methods, которую мы рассматривали в статье «An Attempt To Make Java Easier To Learn», где мы обнаружили, что ни для кого не секрет, что Java не является любимым языком в кодинговых буткампах.

Поэтому предложение OpenJDK пытается изменить это путем реформирования самого синтаксиса языка, чтобы
простой пример «Hello World» стал бы таким же простым, как

void main() {
System. out. println(«Hello World»);
}

Этот третий просмотр предполагает два дополнения:

Неявно объявленные классы автоматически импортируют три статических метода для простого текстового ввода/вывода с консоли. Эти методы объявлены в новом классе верхнего уровня java.io.IO.

Неявно объявленные классы автоматически импортируют, по требованию, все публичные классы верхнего уровня и интерфейсы пакетов, экспортируемых модулем java.base.

Теперь вопрос в том, кто будет дорабатывать свои продукты, чтобы приспособить их к новой версии.

Первой на эту волну вскочила компания Jetbrains, добавив поддержку Java 23 в IntelliJ IDEA 2024.2. Следующим ближайшим кандидатом, судя по этому сообщению, является движок запросов Trino. Кто последует за ним?

Читайте также