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 ()
Последнее исправление: cocucka (всего исправлений: 8)

Ответ на: комментарий от Fizzika

Если ты про record, то полностью Lombok это не заменит. Рекорды неизменяемы.

hummer
()

sealed class

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

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

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

WTF?

anonymous
()

На странице загрузки пишут, что доступно бесплатно для всех и вся. Выходит снова поменяли лицензию?

anonymous
()

Ура товарищи! Три года ждал. До котлина все еще далеко, но хоть что-то

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

Например чтобы сделать exhaustive switch, который можно будет проверить компилятором.

Legioner ★★★★★
()

JEP 398: Deprecate the Applet API for Removal

Все. Бросаю джава и перехожу опять на нодовские микросервисы.

Джава, ты меня предала! Я начинал тебя изучать именно с Tic Tac Toe апплетов.

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

В российских банках с версией джавы чаще всего все в порядке. В Европе да, печаль

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

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

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

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

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

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

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

Жаба самая быстрая на свете. Разве что Rust может сравниться, если постараться.

А ты - шутник-затейник, однако!

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

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

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

Я когда участвовал в проекте переписывания ынтырпрайс гуя на Eclipse RCP / SWT на хипстеровский React Native.

Вот это было больно.

GP
()
Ответ на: комментарий от 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)
Ответ на: комментарий от i3draven

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

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

Может быть, но мне приходится все время жать пересборку. Привык уже.

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

Плюсану, Идея 2021 багованная шоппц. Хоть до 2020 откатывайся.

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

Синтаксис, доступность из коробки в любых дистрибутах без доп. установки пакетов из репозитория.

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

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

Кто этот кто-то?

hummer
()
Ответ на: комментарий от i3draven

Java+Eclipse forever!

Eclipse сейчас сделан на WebKit-Gtk3. Это Fail.

iZEN ★★★★★
()

Что сломали-то по сравнению с 11-ой? В джаву без поломок совместимости я не верю.

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

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

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

anonymous
()
Ответ на: комментарий от i3draven

Последняя версия Eclipse 2021 настолько глючная, что был вынужден был поставить взад последнюю самую стабильную версию Eclipse 2008

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

Тех, кому эта идея пришла в голвоу, не заставлял это делать?

Shadow ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.