LINUX.ORG.RU

Java 17 LTS

 , ,


0

0

Состоялся релиз Java 17 с расширеной поддержкой (LTS). Предыдущая версия с расширеной поддержкой, Java 11, вышла в 2018 году.

Наиболее примечательным изменением в данной версии является то, что поддержка «запечатаных» (sealed) классов и интерфейсов вышла из стадии предварительного просмотра и признана готовой к использованию.

Запечатанные (sealed) типы — это классы или интерфейсы, накладывающие ограничения на другие классы или интерфейсы, которые могут расширять или реализовывать их. Для объявления запечатанного класса или интерфейса используется модификатор sealed. Список подтипов может быть перечислен при объявлении запечатанного класса или интерфейса после ключевого слова permits. В случае если подтипы находятся в том же пакете или модуле, компилятор сам может вывести список подтипов и permits в объявлении запечатанного класса или интерфейса можно опустить.

sealed interface Color permits BiColor, TriColor { }
	
record BiColor(int r, int g, int b) implements Color {}
record TriColor(int r, int g, int b) implements Color {}

Реализованы спецификации:

  • JEP 306: Restore Always-Strict Floating-Point Semantics
    Операции с плавающей запятой теперь будут постоянно строгими, вместо того чтобы иметь как строгую семантику с плавающей запятой (strictfp), так и слегка отличающуюся семантику с плавающей запятой по умолчанию.

  • JEP 356: Enhanced Pseudo-Random Number Generators
    Создан новый интерфейс RandomGenerator и реализации для генераторов псевдослучайных чисел (PRNG): SplittableRandomGenerator, JumpableRandomGenerator, LeapableRandomGenerator, ArbitrarilyJumpableRandomGenerator.

  • JEP 382: New macOS Rendering Pipeline
    Добавлен новый конвейер рендеринга для macOS, использующий API Metal, в качестве альтернативы существующему конвейеру, использующему устаревший API OpenGL.

  • JEP 391: macOS/AArch64 Port
    Реализовано выполнение Java-кода на базе инструкций AArch64 без использования Rosetta 2.

  • JEP 398: Deprecate the Applet API for Removal
    Applet API помечен на удаление и будет удалён в последующих релизах.

  • JEP 403: Strongly Encapsulate JDK Internals
    Полностью убрана возможность ослабить строгую инкапсуляцию внутренних частей JVM; параметр --illegal-access, позволявший это сделать в предыдущих версиях, удалён.

  • JEP 406: Pattern Matching for switch (Preview)
    Реализован редварительный просмотр Pattern Matching для конструкции switch.

  • JEP 407: Remove RMI Activation
    Механизм активации RMI удалён.

  • JEP 409: Sealed Classes
    Запечатанные классы или интерфейсы ограничивают доступ к их расширению или реализации посредством явного указания классов/интерфейсов которым это разрешено.

  • JEP 410: Remove the Experimental AOT and JIT Compiler
    Удалена экспериментальная поддержка АОТ-компилятора.

  • JEP 411: Deprecate the Security Manager for Removal
    Security Manager помечен как устаревший и будет удалён в последующих версиях вместе с Applet API.

  • JEP 412: Foreign Function & Memory API (Incubator)
    Улучшены два ранее созданных API: Foreign-Memory Access API и Foreign Linker API.

  • JEP 414: Vector API (Second Incubator)
    Вторая версия для предварительного просмотра, где была улучшена производительность и реализация Vector API, включая улучшения преобразования байтовых векторов в логические массивы из них.

  • JEP 415: Context-Specific Deserialization Filters
    Добавлена настраиваемая фабрика фильтров для всей JVM. Эти фильтры являются динамическими и зависят от контекста, в отличие от единственного статического фильтра десериализации для всей JVM. Для обратной совместимости, если фабрика фильтров не задана, встроенная фабрика возвращает статический фильтр для всей JVM, если он был настроен.

>>> Подробности

★★★★★

Проверено: xaizek ()

sealed class

Не совсем одупляю, зачем ограничивать расширение существующего кода без его редактирования (особенно реализацию интерфейсов), но раз запилили, значит, кому-то нужно.

Nervous ★★★★★ ()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от ox55ff

В C# всё есть. Только 99% из этого - не нужно.

Впрочем properties в Java действительно не хватает, а твердолобые разработчики их упорно игнорируют, пихая какую-то лажу в качестве заменителя.

Legioner ★★★★★ ()
Ответ на: комментарий от Legioner

Впрочем properties в Java действительно не хватает, а твердолобые разработчики их упорно игнорируют, пихая какую-то лажу в качестве заменителя.

Есть там у них один тормоз, при слове «properties» начинает пеной брызгать, это из-за него все

slyjoeh ★★★ ()
Ответ на: комментарий от shpinog

Там виновата не Java, а архитектура. Я когда-то делал GUI-приложение на Java с JNI-биндингами к WinAPI. Работало идеально. Просто на Java любят упарываться по переносимому коду где надо и где не надо, что порой приводит к странным результатам.

Legioner ★★★★★ ()

Недавно пришлось изучить котлин. Какое же он гuaно. Только после этого я понял насколько «консвервативность» джава инженеров это хорошо. Котлин код делает непонятно, что и каждый изобретает по сути свой диалект языка со всеми этими «это пропертя на самом деле метод» и «а тут мы на самом деле создаем экземпляр класса, а не вызываем метод, да и вообще это инфикс». Я такой каши нечитабельной в коде давно не видел, когда ты создал кучу всего а думаешь, что сто раз вызвал метод. Причем этот kotlin гuaно еще и потому, что без среды разработки его ревьюить вообще боль в gitlab, так как хер знает, что этот код на самом деле делает. Не говоря уже о idea, на которое пришлось поработать и которая постоянно не отдупляет, что код поменялся и надо бы подчеркнуть ошибки.

Но с опытом конечно и на этом говне писать можно и в любой среде. Психологическая гибкость, важна и тренировка смены языков и пр.

Java+Eclipse forever!

i3draven ()
Последнее исправление: i3draven (всего исправлений: 1)

Ещё интересные фишки:

  1. Oracle Java стала бесплатной для всех, включая коммерсов. По сути зоопарк закончился, вернулись к старой доброй модели одного дистрибутива. Introducing the Free Java License

  2. LTS теперь будет каждые 2 года, а не три (пока это proposal, но скорей всего примут). Moving Java Forward Even Faster

Возможно стоит добавить в новость, вещи важные.

Legioner ★★★★★ ()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Ivan_qrt

Ну написали же

Полностью убрана возможность ослабить строгую инкапсуляцию внутренних частей JVM; параметр –illegal-access, позволявший это сделать в предыдущих версиях, удалён.

anonymous ()