JDK (Java Development Kit) 17 был выпущен сегодня, это первый выпуск с долгосрочной поддержкой после JDK 11 три года назад.
Новая версия Java появляется каждые шесть месяцев, в марте и сентябре. Согласно жизненному циклу поддержки Oracle Java SE, они поддерживаются только в течение шести месяцев до появления следующего, тогда как версии LTS поддерживаются в течение восьми лет.
Java 8 (последняя перед серьезным обновлением JDK в Java 9 со многими критическими изменениями) имеет расширенную поддержку до декабря 2030 года, а расширенная поддержка Java 11 продлится до сентября 2026 года.
Поставщики бесплатных редакций Java OpenJDK обычно совпадают, а иногда и превышают эти даты поддержки, но только редакции LTS предназначены для долгосрочного использования.
Что нового в Java 17?
В списке функций нет ничего огромного. Одна важная вещь – это запечатанные классы, которые впервые были представлены в Java 15. Запечатанные классы ограничивают типы, которые могут наследовать от них. В Java запечатанный класс имеет пункт разрешений, который определяет разрешенные подклассы, например:
public abstract sealed class Shape permits Circle, Rectangle, Square { ... }
Улучшена встроенная поддержка macOS, включая новый конвейер рендеринга для Java 2D с использованием macOS Metal и перенос на AArch64 (Apple Silicon).
Новый генератор случайных чисел в выпуске предлагает расширенные функции, включая улучшенные алгоритмы рандомизации, хотя эта функция также имеет цель «тщательно сохранить существующее поведение класса java.util.Random».
Некоторые вещи удаляются. Вверху списка находится API апплета. «Это восходит к самому началу Java, – сказал заместитель технического директора Azul Systems Саймон Риттер на круглом столе для прессы, посвященном Java 17.
«Апплеты действительно уходят. В JDK 11 был удален подключаемый модуль браузера апплетов… и они решили фактически избавиться от API апплетов. В Java 17 он устарел для удаления, вероятно, в JDK 18.»
Также был удален экспериментальный компилятор опережающего развития Java (AOT), в документации говорилось, что «этот компилятор практически не использовался с момента его появления, и усилия, необходимые для его поддержки, значительны» и что «эти функции не были включены в сборки JDK 16, опубликованные Oracle, и никто не жаловался ».
Компилятор HotSpot Just-in-time все еще существует, и те, кто хочет использовать компиляцию AOT, были указаны в пользу Graal.
Инструмент jpackage не является компилятором AOT, но делает Java-приложения оболочкой как родное приложение; это было частью Java 16.
Сильная инкапсуляция внутренних компонентов JDK – еще одна новая функция, завершающая простой способ обхода блокировки при доступе к внутренним API. Широко используемый sun.mic.Unsafe остается доступным по соображениям совместимости.
В предварительной версии в Java 17 есть расширенный оператор switch с сопоставлением с образцом. Еще один ключевой предварительный просмотр (в инкубаторе) – API внешних функций и памяти, также известный как Project Panama. Этот API направлен на обеспечение более безопасной и простой в использовании альтернативы Java Native Interface (JNI). «API позволяет программам Java вызывать собственные библиотеки и обрабатывать собственные данные без хрупкости и опасности JNI», – говорится в документации.
Сопоставление шаблонов переключателей не так важно, как выражения переключателей, предварительно представленные в JDK 12 и полностью выпущенные в Java 14, но опять же, из-за короткого цикла поддержки многие разработчики будут переходить на Java 17 с Java 11 или даже с Java 8, так что все это будет в новинку.
Двигаясь дальше
«Многие разработчики все еще находятся на 8-м уровне», – сказала Триша Джи, член исполнительного комитета JCP (Java Community Process) и ведущий защитник разработчиков в JetBrains. .
«Переход с 8 на 11 выглядел немного пугающе из-за проблем с миграцией из-за способа реструктуризации JVM. Если посмотреть на разницу в языковых функциях с 8 на 11, то мы получили var и не использовали На самом деле не намного больше. В 9, 10 и 11 есть несколько хороших вещей, но ничего действительно убедительного ».
«Между 11 и 17 годами интереснее», – сказал Джи. «Теперь, когда вышло 17, у вас есть все эти прекрасные языковые функции, которые появились с 11. У нас есть запечатанные классы, например, сопоставление с образцом, которое появилось в 16, записи, которые являются моей любимой функцией, просто хранитель данных без каких-либо церемоний, и он намного удобнее для чтения.
«Текстовый блок тоже хорош, потому что на самом деле большая часть разработки на Java такова, что внутри вашего Java-кода будут строки на других языках, возможно, на SQL, а иногда и на JavaScript. А другой – это выражения переключения».
Текстовые блоки – это строки, состоящие из нескольких строк, заключенные в три кавычки.
Мы, JetBrains, не оставляли комментариев при голосовании «Да» и не голосовали против чего-либо со времен Java 9.
Было ли что-нибудь спорное в Java 17 или других недавних выпусках в Комитете JCP? «Мы, JetBrains, не оставляли комментариев по поводу голосования« Да »и не голосовали против чего-либо со времен Java 9», – сказал нам Джи. Она сказала, что шестимесячный процесс выпуска проходит гладко и что с новыми функциями «обычно к тому времени, когда они попадают в JCP, это не вызывает споров, потому что эти обсуждения велись с сообществом».
Отстает ли Java от Kotlin, языка JVM JetBrains, разработанного JetBrains и принятого Google для Android? «Есть критика с обеих сторон», – сказал Джи. “Java-разработчики видят в Kotlin то, что им нужно в Java, и критику со стороны мира Kotlin, говоря, что было бы неплохо, если бы JVM или Java что-то поддерживали … так что да, есть напряжение, но я думаю, что это положительное напряжение, например гонка вооружений, но в хорошем смысле. История обратной совместимости всегда была самым важным с точки зрения Oracle ».
“Одна из самых больших проблем [JDK developers] есть то, что, конечно, было бы неплохо добавить множество функций в Java, но они должны делать это очень контролируемым образом, чтобы гарантировать, что обратная совместимость не будет радикально затронута … причина того, что Java развивается немного медленнее, чем “языки, такие как Kotlin, во многом связаны с тем, чтобы мы не ломали вещи”, – сказал Риттер.
Насколько сложно перейти на Java 17? Далия Або Шеаша, адвокат разработчиков Java в JetBrains, сказала: «Я думаю, что самым важным будет сильная инкапсуляция, потому что раньше я советовал держать флаг незаконного доступа включенным, а сильная инкапсуляция означает, что его больше нет. переход с 8 на 11 был более серьезной проблемой, чем переход с 11 на 17 “.
Похоже, что переход с Java 8 в последнее время ускорился. В опросе Eclipse Jakarta EE, для которого только что вышла версия 2021 года, приняли участие 940 участников из сообществ корпоративных разработчиков. Использование Java 11 увеличилось с 28 процентов в 2020 году до 58 процентов в этом году.
Опрос также показал преобладание платформы Spring / Spring Boot для корпоративной Java с долей рынка 60 процентов по сравнению с 44 процентами в 2020 году. Это был небольшой опрос, поэтому некоторые изменения могут быть объяснены различиями в группа участвующих.
Почему выжила Java?
«Обратная совместимость… некоторые приложения, написанные на Java 10, 15, 20 лет назад, все еще работают, и до сих пор работают в основе организаций, которые зарабатывают деньги», – сказал Джи. «Вдобавок к этому, это очень высокопроизводительный язык, и при этом его довольно легко писать, поэтому вам не нужно писать низкоуровневый код… JVM сделает это за вас быстро».
Большинство языковых опросов сходятся во мнении: Java остается популярной и ее использование стабильно. «Язык, когда-то созданный для работы с кабельными приставками, продолжает оставаться рабочей лошадкой, и, что немаловажно, постоянно находит новую работу. Показатели Java в этом рейтинге продолжают впечатлять все эти годы спустя, и по мере того, как продемонстрировала замечательную способность адаптироваться к быстро меняющимся условиям », – сказал аналитик Redmonk Стивен О’Грейди.