Как стать автором
Обновить

Комментарии 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: ). Последнее трогать не предлагаю.

Когда добавили это не важно. Оно попало в LTS релиз. На этом все. Это навсегда или почти навсегда. Быстрее 20 лет точно ничего никто не удалит.

Что может быть проще?


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 - во сколько теперь способов работы с датой и временем

И с Java 8 только один из них правильный

Слава Богу я удрал из этого джава мрака сто лет назад

Куда?

Спасибо за очень интересную статью!)

Фичи не особо, скажем, мегаожидаемые. Думаю, ещё долго на 18 не будут переходить

На неё и не надо переходить. Не LTS же.

Это версия на посмотреть новые фичи, попробовать. Не для прода.

JEP 400 ждем с 1-й версии. Благодаря ему, 18-я - это 1-я ява, которую я поставил на этапе early access.

Релиз успешно вышел, статистика исправлений и другая техническая информация доступна в примечаниях вендоров, например https://bell-sw.com/pages/liberica-release-notes-18/

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории