Начиная с Java 22, предлагается выдавать предупреждения при использовании JNI. Выглядеть это будет как-то так:
В какой-то из будущих версий Java предупреждение уже будет полностью заменено на исключение IllegalCallerException. Так что для приложений, использующих JNI, флаг
Про полное удаление JNI пока речи не идёт.
Напомним, что в OpenJDK много лет разрабатывается альтернатива JNI — Foreign Function & Memory API (FFM). В той же Java 22 она выйдет из состояния preview и станет стабильной частью Java. FFM является более безопасной, чем JNI, и при её использовании флаг
#java22 #jni #ffm
WARNING: A restricted method in java.lang.System has been called
WARNING: System::load has been called by com.foo.bar.Server in {an unnamed module, module com.foo.bar}
WARNING: Use --enable-native-access={ALL-UNNAMED, com.foo.bar} to avoid a warning for callers in this module
WARNING: Restricted methods will be blocked in a future release unless native access is enabled
Для подавления таких предупреждений надо будет запускать приложение с флагом --enable-native-access, где надо будет указать список модулей, которым разрешено загружать нативный код. Если в рантайме будет попытка загрузки из модуля не из списка, то уже будет вылетать IllegalCallerException.В какой-то из будущих версий Java предупреждение уже будет полностью заменено на исключение IllegalCallerException. Так что для приложений, использующих JNI, флаг
--enable-native-access уже будет обязательным.Про полное удаление JNI пока речи не идёт.
Напомним, что в OpenJDK много лет разрабатывается альтернатива JNI — Foreign Function & Memory API (FFM). В той же Java 22 она выйдет из состояния preview и станет стабильной частью Java. FFM является более безопасной, чем JNI, и при её использовании флаг
--enable-native-access можно будет не указывать и Java не будет выдавать предупреждения (за исключением ситуации, когда используется небезопасная часть FFM API — для неё всё будет аналогично JNI).#java22 #jni #ffm
🔥6👍5⚡1
В OpenJDK предложен новый проект Babylon. Он позволит доступаться до структуры Java кода не только во время компиляции, но и во время выполнения. Это позволит рантайму анализировать и трансформировать код, например, генерировать код на SQL (аналогично Expression Trees в C#, что открывает возможности для таких вещей как LINQ).
Про это также был доклад на JVM Language Summit.
#babylon
Про это также был доклад на JVM Language Summit.
#babylon
🔥10👍4🤯3🎉1🌚1🤨1
Плагин JPA Buddy к IntelliJ IDEA Ultimate стал полностью бесплатным
👍20🤮3💅1
Похоже, что в Java 22 безымянные переменные и паттерны выйдут из preview. Это будет первый случай, когда языковая конструкция пробыла в preview всего один релиз.
Ранее все языковые конструкции в preview были как минимум два релиза:
• switch expressions: два релиза (Java 12 и 13)
• text blocks: два релиза (Java 13 и 14)
• records: два релиза (Java 14 и 15)
• pattern matching for instanceof: два релиза (Java 14 и 15)
• sealed: два релиза (Java 15 и 16)
• pattern matching for switch: 4 релиза (Java 17, 18, 19 и 20)
• records patterns: два релиза (Java 19 и 20)
Ну и теперь unnamed variables and patterns: только 1 релиз (Java 21)
#java22
Ранее все языковые конструкции в preview были как минимум два релиза:
• switch expressions: два релиза (Java 12 и 13)
• text blocks: два релиза (Java 13 и 14)
• records: два релиза (Java 14 и 15)
• pattern matching for instanceof: два релиза (Java 14 и 15)
• sealed: два релиза (Java 15 и 16)
• pattern matching for switch: 4 релиза (Java 17, 18, 19 и 20)
• records patterns: два релиза (Java 19 и 20)
Ну и теперь unnamed variables and patterns: только 1 релиз (Java 21)
#java22
👍10🔥3🤯3✍1🤔1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁22❤9👍1
Вышла сразу пачка новых JEP'ов.
JEP 456: Unnamed Variables and Patterns
Безымянные переменные и паттерны станут стабильными в Java 22 после всего одного раунда превью.
JEP: String Templates (Final)
Шаблонные строки, похоже, тоже станут стабильными в Java 22.
JEP: Implicitly Declared Classes and Instance Main Method (2nd Preview)
Безымянные классы хотят переименовать в implicitly declared классы.
JEP 455: Primitive types in Patterns, instanceof, and switch (Preview)
Можно будет писать
JEP 457: Class-File API (Preview)
API для чтения, записи и трансформации Java class-файлов. Кстати, оно уже есть в Java 21, но в internal пакете
#java22
JEP 456: Unnamed Variables and Patterns
Безымянные переменные и паттерны станут стабильными в Java 22 после всего одного раунда превью.
JEP: String Templates (Final)
Шаблонные строки, похоже, тоже станут стабильными в Java 22.
JEP: Implicitly Declared Classes and Instance Main Method (2nd Preview)
Безымянные классы хотят переименовать в implicitly declared классы.
JEP 455: Primitive types in Patterns, instanceof, and switch (Preview)
Можно будет писать
if (obj instanceof int). Вангую, что тоже попадёт в Java 22.JEP 457: Class-File API (Preview)
API для чтения, записи и трансформации Java class-файлов. Кстати, оно уже есть в Java 21, но в internal пакете
jdk.internal.classfile. В Java 22 станет preview.#java22
🆒8🤯1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18❤1😴1
microJUG
Виктор Кланг предложил добавить новый метод gather() в стримы. Это что-то вроде collect(), но ещё более общая операция, через которую можно будет реализовать все остальные. Эдакие коллекторы 2.0. Это наконец-то сделает стримы расширяемыми. #stream
Предложение в итоге вылилось в JEP 461: Stream Gatherers (Preview)
👍11🤔3💩2✍1🔥1
Вышел Spring 6.1 GA 🥳
Вместе с ним выходит Spring Boot 3.2, но это произойдёт 23 ноября, так что надо чуть-чуть подождать.
В релизе Spring 6.1 тонна всего нового, но главная фишка – это, конечно же, поддержка виртуальных потоков. Включаются они флагом
Ещё из интересного:
Новый интерфейс RestClient. Он синхронный, как и старый RestTemplate, но имеет современное удобное fluent API, похожее на WebClient, появившийся в Spring 5. Он не использует WebFlux, а значит не требует зависимости spring-webflux. Т.к. теперь есть виртуальные потоки, то синхронность уже не является проблемой и не вредит масштабируемости. RestClient, как и WebClient, разумеется, поддерживает декларативные HTTP-клиенты, созданные из интерфейсов с аннотациями @HttpExchange.
Новый интерфейс JdbcClient. Это современная альтернатива JdbcTemplate с fluent API:
Ещё появилась поддержка CRaC, поддержка
#spring
Вместе с ним выходит Spring Boot 3.2, но это произойдёт 23 ноября, так что надо чуть-чуть подождать.
В релизе Spring 6.1 тонна всего нового, но главная фишка – это, конечно же, поддержка виртуальных потоков. Включаются они флагом
spring.threads.virtual.enabled=true (требуется JDK 21+). С виртуальными потоками можно спокойно вызывать блокирующее API и ни о чём не беспокоиться.Ещё из интересного:
Новый интерфейс RestClient. Он синхронный, как и старый RestTemplate, но имеет современное удобное fluent API, похожее на WebClient, появившийся в Spring 5. Он не использует WebFlux, а значит не требует зависимости spring-webflux. Т.к. теперь есть виртуальные потоки, то синхронность уже не является проблемой и не вредит масштабируемости. RestClient, как и WebClient, разумеется, поддерживает декларативные HTTP-клиенты, созданные из интерфейсов с аннотациями @HttpExchange.
Новый интерфейс JdbcClient. Это современная альтернатива JdbcTemplate с fluent API:
Optional<Integer> value = client.sql("SELECT AGE FROM CUSTOMER WHERE ID = :id")
.param("id", 3)
.query(Integer.class)
.optional();Ещё появилась поддержка CRaC, поддержка
@HttpExchange аннотаций в MVC-контроллерах и многое другое. Подробный список можно посмотреть тут.#spring
❤18🎉9🥱1
Что там по Java 22? Список JEP'ов на текущий момент такой (и я думаю, окончательный):
JEP 456: Unnamed Variables & Patterns
JEP 459: String Templates (Second Preview)
JEP 447: Statements before super(...) (Preview)
JEP 455: Primitive types in Patterns, instanceof, and switch (Preview)
JEP 463: Implicitly Declared Classes and Instance Main Methods (Second Preview)
JEP 458: Launch Multi-File Source-Code Programs
JEP 457: Class-File API (Preview)
JEP 461: Stream Gatherers (Preview)
JEP 454: Foreign Function & Memory API
JEP 460: Vector API (Seventh Incubator)
JEP 462: Structured Concurrency (Second Preview)
JEP 423: Region Pinning for G1
JEP 464: Scoped Values (Second Preview)
Список довольно внушительный, но если отбросить превью/инкубаторы, то остаётся только Unnamed Variables & Patterns, Foreign Function & Memory API, Launch Multi-File Source-Code Programs и Region Pinning for G1. В принципе, безымянные переменные/паттерны – неплохая фича, я бы попробовал.
А что вы думаете? Будете переходить на Java 22 с 21, когда выйдет? 😆 Ну а если серьёзно, то всё это станет стабильным в следующем LTS (Java 25), и это будет действительно мощный релиз (может, там даже и Valhalla будет).
#java22
JEP 456: Unnamed Variables & Patterns
JEP 459: String Templates (Second Preview)
JEP 447: Statements before super(...) (Preview)
JEP 455: Primitive types in Patterns, instanceof, and switch (Preview)
JEP 463: Implicitly Declared Classes and Instance Main Methods (Second Preview)
JEP 458: Launch Multi-File Source-Code Programs
JEP 457: Class-File API (Preview)
JEP 461: Stream Gatherers (Preview)
JEP 454: Foreign Function & Memory API
JEP 460: Vector API (Seventh Incubator)
JEP 462: Structured Concurrency (Second Preview)
JEP 423: Region Pinning for G1
JEP 464: Scoped Values (Second Preview)
Список довольно внушительный, но если отбросить превью/инкубаторы, то остаётся только Unnamed Variables & Patterns, Foreign Function & Memory API, Launch Multi-File Source-Code Programs и Region Pinning for G1. В принципе, безымянные переменные/паттерны – неплохая фича, я бы попробовал.
А что вы думаете? Будете переходить на Java 22 с 21, когда выйдет? 😆 Ну а если серьёзно, то всё это станет стабильным в следующем LTS (Java 25), и это будет действительно мощный релиз (может, там даже и Valhalla будет).
#java22
✍8👍3🤯1
👍16🎉4💩1
JetBrains запустил JetBrains AI. Это AI ассистент в IDE, который умеет многое, например, может объяснить код, предложить рефакторинг, предложить мультистроковое автодополнение, сконвертировать код в другой язык, сгенерировать коммит-сообщение, документацию, юнит-тесты и т.д. и т.п. Всё это он может, потому что глубоко анализирует окружающий контекст (текущий файл, проект, зависимости, язык...)
Также есть AI чат с ассистентом.
Ассистент работает через JetBrains AI Service, который в свою очередь использует OpenAI.
Подписка, разумеется, платная: 100$ в год или 10$ в месяц, если помесячно. Есть free trial. При этом сама IDE должна быть с лицензией (IDEA Community не подойдёт).
Чтобы включить ассистента, нужно обновиться до IDEA 2023.3.
#idea
Также есть AI чат с ассистентом.
Ассистент работает через JetBrains AI Service, который в свою очередь использует OpenAI.
Подписка, разумеется, платная: 100$ в год или 10$ в месяц, если помесячно. Есть free trial. При этом сама IDE должна быть с лицензией (IDEA Community не подойдёт).
Чтобы включить ассистента, нужно обновиться до IDEA 2023.3.
#idea
💩20👍11