Comments 33
JEP 413: Кусочки кода в документации Java API
JEP 419: Foreign Function & Memory API (второй инкубатор)
JEP 420: Pattern Matching для switch (второй preview)
Вроде все, что интересно. Может кому-то ещё рефлексия зайдет.
Хей @tagir_valeev а в Идее @сниппеты можно автодополнять? Можно сделать какой-нибудь рефакторинг типа "move to snippet"?
Лет через 10, поюзаем в продакшн
Угу, где-то да. До сих пор рекрутеры в личку стучатся с предложениями: "Ищу Java-разработчика в один из крупнейших российских банков. Java 8, 11, настоящий High-load и Микросервисы! Актуальный стек: Struts, Hibernate, Tomcat, ActiveMQ, Maven, ... "
Apache Spark тоже 8 и 11 версии поддерживает, на них и сидим :)
В каких-то компаниях можно и на 7 поработать
А какой сейчас стек мечты?
Буквально месяц назад апгрейдился, долго думал, выбрал Java 11, она последний LTS на который более-менее переползла экосистема, запускать 6-месячные релизы в prod не круто. Так что нормально, что ищут Java 11. ActiveMQ если правильно настроить (особенно Artemis) тоже вполне себе middleware, пашет и есть не просит.
Java 17 - LTS, уже три патча вышли, скоро следующая мажорная версия выходит, большая часть экосистемных библиотек уже переползли на нее (из того, что используем - spring (boot, webflux, micrometer, spring-data-jdbc), netty, reactor, jackson, guava, log4j2, retrofit, grpc, junit, драйверы к очередям и бд (в том числе и jdbc)). Мы у себя инфраструктурные проекты уже на 17 перевели. Теперь потихоньку внешние сервисы мигрируем с java 11 (слава богу, нет Java EE с легаси-зависимостями)
Более того, в следующем году уже и очередной LTS релиз выйдет (JDK 21). Актуальный Spring конечно - это сильный довод в пользу 17.
11 в данный момент тоже хорошо, так как до последнего врмемени портировались в заметных количествах улучшения (в отличие от 8), и как раз перестают, ну и стабилизация тоже активная. То есть в каком-то смысле сейчас самый пик поддержки 11.
В switch-выражениях теперь вымораживает возможность указать default ->
и case default ->
, что выглядит одинаково, но второй является уже вариантом для паттерн-матчинга (позволяя, например, комбинировать так: case default, null ->
). Надеюсь, первый вариант синтаксиса задеприкейтят и удалят в будущих версиях в пользу второго.
Удалить нельзя ничего. По крайней мере быстрее чем лет за 30 точно.
new Date() передает привет.
Это синтаксический сахар языка, а не библиотека или байт-код. Совместимость на уровне скопированного кода не нарушится. Просто старые java-файлы перестанут компилироваться без внесения изменений. Это некритично для сохранения обратной совместимости. Уже делали более сильные изменения.
Просто старые java-файлы перестанут компилироваться без внесения изменений. Уже делали более сильные изменения.
Можно пример? Чтобы java код написанный без библиотек перестал компилироваться.
Из того, что помню: добавление ключевых слов assert в 1.4 (сломался junit и код, который его использует), enum в 1.5, запрет на использование символа подчеркивания в качестве идентификатора переменной в java 11. К каждой версии JDK выпускается Migration guide, в котором описываются несовместимые изменения в jls, jvms, рантайм-библиотеке и тулзах, поставляемых с jdk(jre)
добавление ключевых слов assert в 1.4 (сломался junit и код, который его использует
Библиотеки ломаются время от времени. Я именно про core java.
enum в 1.5
Спецификации уже нет. Увы. Таких исторических книжек у меня тоже уже нет.
https://docs.oracle.com/javase/specs/index.html
запрет на использование символа подчеркивания в качестве идентификатора переменной в java 11
An identifier is an unlimited-length sequence of Java letters and Java digits, the first of which must be a Java letter.
The "Java letters" include uppercase and lowercase ASCII Latin letters A-Z (\u0041-\u005a), and a-z (\u0061-\u007a), and, for historical reasons, the ASCII dollar sign ($, or \u0024) and underscore (_, or \u005f). The dollar sign should be used only in mechanically generated source code or, rarely, to access pre-existing names on legacy systems. The underscore may be used in identifiers formed of two or more characters, but it cannot be used as a one-character identifier due to being a keyword.
https://docs.oracle.com/javase/specs/jls/se17/html/jls-3.html#jls-3.8
Для сравнения 6 https://docs.oracle.com/javase/specs/jls/se6/html/lexical.html#3.8
К каждой версии JDK выпускается Migration guide, в котором описываются несовместимые изменения в jls, jvms, рантайм-библиотеке и тулзах, поставляемых с jdk(jre)
Конечно. Но чтобы ломались базовые языковые фичи языка это вам не к Джаве. Тем более после истории третьего Питона. Все теперь совсем умными стали.
То, что вы в ссылках привели, как раз и подтверждает, что язык меняется от версии к версии: добавляются новые ключевые слова, которые нельзя использовать в идентификаторах в java-коде. Некоторые слова наоборот убирают, например, ставший ненужным strictfp (если попытаться скомпилировать код с ним, то, начиная с 17 версии jdk, компиляция будет падать)
strictfp это отличный пример. Он лет 10 вроде уже ничего не делал? И только сейчас выпилили.
Удаление фич с ломанием обратной совместимости это тяжёлый и долгий путь. Ломать семантику switch это история минимум лет на 20. Вероятнее что даже начинать не будут.
Switch-expression (case blablabla ->
) в java 12 добавили (релиз был в 2019 году). Я не имею ввиду switch-statement (case blablabla:
). Последнее трогать не предлагаю.
Что может быть проще?
public class Surprise {
public static void main(String... _) {
System.out.println("Source incompatibility with Java 9+!");
}
}
До Java 8 всё ОК, в Java 8 — warning, в Java 9+ — error.
Date, Calendar, Joda-Time, Java Time API - во сколько теперь способов работы с датой и временем
Слава Богу я удрал из этого джава мрака сто лет назад
Спасибо за очень интересную статью!)
Фичи не особо, скажем, мегаожидаемые. Думаю, ещё долго на 18 не будут переходить
Релиз успешно вышел, статистика исправлений и другая техническая информация доступна в примечаниях вендоров, например https://bell-sw.com/pages/liberica-release-notes-18/
Java 18. Что нового добавили, и почему вам это пригодится