Сегодня с ребятами из каналов @javaswag и @staff_engineers будем обсуждать новые фичи в Java 22. Стрим начнётся в 20:30 по Москве. Приходите, будет интересно.
https://www.youtube.com/watch?v=8E_g-VHJCtw
https://www.youtube.com/watch?v=8E_g-VHJCtw
YouTube
СТАФФ 010 [live]. Джава 22
Минорный релиз джавы, что там нового? Гость выпуска -- Евгений Козлов.
https://openjdk.org/projects/jdk/22/
Ссылки:
- tg: https://news.1rj.ru/str/staff_engineers
- гость: https://news.1rj.ru/str/miniJUG
https://openjdk.org/projects/jdk/22/
Ссылки:
- tg: https://news.1rj.ru/str/staff_engineers
- гость: https://news.1rj.ru/str/miniJUG
🔥14 11🌚3👍1
Новый черновик JEP: Module Import Declarations (Preview).
Предлагается добавить новый тип импорта: импорт всех экспортированных пакетов из модуля. Например:
Это то же самое, что вручную написать
Предлагается добавить новый тип импорта: импорт всех экспортированных пакетов из модуля. Например:
import module java.base;
Это то же самое, что вручную написать
import для всех пакетов, экспортированных в модуле java.base:import java.io.*;
import java.util.*;
import java.util.function.*;
... // ещё 51 импорт
💩9🤯8🔥5🤔4 4
Брайан Гетц написал огромное письмо в рассылку, где впервые очень подробно и с конкретными примерами синтаксиса написал, как могут выглядеть member-паттерны (паттерны-члены). Напомню, что в Java сейчас есть только паттерны у записей. Member-паттерны позволят объявлять паттерны в любых классах. Рассмотрим несколько примеров:
Паттерн-деконструктор:
Статические паттерны:
(В примере выше
Далее такие статические паттерны можно уже применять в
Инстанс-паттерны:
Использование:
Как-то так.
#patternmatching
Паттерн-деконструктор:
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
pattern Point(int x, int y) {
matches Point(that.x, that.y);
}
}Статические паттерны:
class Optional<T> {
static<T> Optional<T> of(T t) { ... }
static<T> Optional<T> empty() { ... }
static<T> case pattern(Optional<T> that) of(T t) {
if (that.isPresent())
matches of(that.get());
}
static<T> case pattern(Optional<T> that) empty() {
if (that.isEmpty())
matches empty();
}
}(В примере выше
case нужен для проверки exhaustiveness компилятором)Далее такие статические паттерны можно уже применять в
switch или instanceof:case Optional.of(var e): ...
case Optional.empty(): ...
Инстанс-паттерны:
public class Class<T> {
...
pattern arrayClass(Class<?> componentType) {
if (that.isArray())
matches arrayClass(that.getComponentType());
}
}package java.util.regex;
public class Pattern
...
pattern(String that) regexMatch(String... groups) {
Matcher m = matcher(that);
if (m.matches())
matches Pattern.regexMatch(IntStream.range(1, m.groupCount())
.map(Matcher::group)
.toArray(String[]::new));
}
}
Использование:
int[] array = {1,2,3,4,5};
Class<?> clazz = array.class;
if (clazz instanceof arrayClass(componentType)) {
...
}static Pattern As = Pattern.compile("(a*)");
static Pattern Bs = Pattern.compile("(b*)");
...
String str = "aaaa";
switch (str) {
case As.regexMatch(var as): ...
case Bs.regexMatch(var bs): ...
...
}Как-то так.
#patternmatching
🤯27👍7💩5👀4🤮2 2🤔1
😥 String Templates всё. В Java 23 их не будет, даже с --enable-preview.
😢17👀10👍8😁5🤯5🍾4🔥1
Вместо Space JetBrains будет развивать новый продукт SpaceCode, который будет платформой для Git-хостинга и код-ревью (аналог GitHub/GitLab).
#jetbrains #spacecode
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍2👨💻1
Сегодня начинается Rampdown Phase One для JDK 23. Окончательный список фич:
455: Primitive Types in Patterns, instanceof, and switch (Preview)
466: Class-File API (Second Preview)
467: Markdown Documentation Comments
469: Vector API (Eighth Incubator)
473: Stream Gatherers (Second Preview)
471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal
474: ZGC: Generational Mode by Default
476: Module Import Declarations (Preview)
477: Implicitly Declared Classes and Instance Main Methods (Third Preview)
480: Structured Concurrency (Third Preview)
481: Scoped Values (Third Preview)
482: Flexible Constructor Bodies (Second Preview)
Как обычно, сплошные превью и инкубаторы. Из стабильного только Markdown Documentation Comments, но я не думаю, что прям все ринутся писать джавадоки в новом формате. Хотя, может, кто-то и будет.
#java23
455: Primitive Types in Patterns, instanceof, and switch (Preview)
466: Class-File API (Second Preview)
467: Markdown Documentation Comments
469: Vector API (Eighth Incubator)
473: Stream Gatherers (Second Preview)
471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal
474: ZGC: Generational Mode by Default
476: Module Import Declarations (Preview)
477: Implicitly Declared Classes and Instance Main Methods (Third Preview)
480: Structured Concurrency (Third Preview)
481: Scoped Values (Third Preview)
482: Flexible Constructor Bodies (Second Preview)
Как обычно, сплошные превью и инкубаторы. Из стабильного только Markdown Documentation Comments, но я не думаю, что прям все ринутся писать джавадоки в новом формате. Хотя, может, кто-то и будет.
#java23
Maven Daemon вышел из беты. Зарелизился mvnd 1.0.0 (и уже 1.0.1). 1.0.0 соответствует Apache Maven 3.9.8.
А вы юзаете mvnd? Я уже юзаю давно. Работает отлично. Работает гораздо быстрее, чем простой Maven.
#maven #mvnd
А вы юзаете mvnd? Я уже юзаю давно. Работает отлично. Работает гораздо быстрее, чем простой Maven.
#maven #mvnd
🎄8👍6👀4👎2🎉2🙈2🔥1
Сбер выпустил открытую среду разработки Giga IDE на базе IntelliJ IDEA/Pycharm со встроенным ИИ-ассистентом GigaCode. Среда доступна в двух вариантах: Giga IDE Desktop и Giga IDE Cloud.
Вскоре после выхода разработчик из JetBrains Юрий Артамонов обнаружил, что в кодовой базе GigaIDE содержится проприетарный код из IntelliJIDEA Ultimate.
СпёрIDE.
Update: Юрий Артамонов разобрался, что Giga IDE всё-таки не нарушает лицензию, так как использует только свободное API.
Но GigaIDE всё-таки будет у нас на карандаше 😉.
#gigaide #gigacode
Вскоре после выхода разработчик из JetBrains Юрий Артамонов обнаружил, что в кодовой базе GigaIDE содержится проприетарный код из IntelliJIDEA Ultimate.
СпёрIDE.
Update: Юрий Артамонов разобрался, что Giga IDE всё-таки не нарушает лицензию, так как использует только свободное API.
Но GigaIDE всё-таки будет у нас на карандаше 😉.
#gigaide #gigacode
💩28🤣19👍7🤡3😭3😁2
Команда проекта Leyden сообщила, что стали доступны сборки раннего доступа Leyden JDK. Они являются результатом более чем года работы над проектом, главной целью которого является ускорение старта JVM. Разработчики просят сообщество поэкспериментировать со сборками и сообщить фидбек. На текущий момент сборки доступны под Linux/x64 и macOS/AArch64.
#leyden
#leyden
Пока вы там переходите на Java 17, в Java 24 уже появился первый JEP: Prepare to Restrict the Use of JNI
#jni
#jni
🔥6 6
Вышел новый EA билд Валгаллы. Как утверждает автор письма, это очень важный майлстоун. Скачиваем и тестируем.
Valhalla всё ближе и ближе к попаданию в mainstream.
#valhalla
Valhalla всё ближе и ближе к попаданию в mainstream.
#valhalla
🔥10 7
Вышла IntelliJ IDEA 2024.2. Новый UI теперь стал дефолтным, а старый UI теперь нельзя включить в настройках. Но можно установить через плагин в JetBrains Marketplace.
#idea
#idea
💩23👏9😁6👍4😭4 3🔥1🤮1
Вышел Hibernate 6.6.0 Final.
Главная фишка – поддержка нового стандарта Jakarta Data 1.0, который является спецификацией stateless репозиториев. Репозиторий – это typesafe API для взаимодействия с БД и представляет более простую программную модель, чем JPA. Для генерации репозиториев используется процессор аннотаций
Пример:
Больше деталей можно прочитать в официальной документации Hibernate и в блоге Гевина Кинга (часть 1 и часть 2).
#hibernate
Главная фишка – поддержка нового стандарта Jakarta Data 1.0, который является спецификацией stateless репозиториев. Репозиторий – это typesafe API для взаимодействия с БД и представляет более простую программную модель, чем JPA. Для генерации репозиториев используется процессор аннотаций
hibernate-jpamodelgen, который поставляется как отдельный артефакт. Процессор аннотаций используется потому, что многие ошибки репортятся на этапе компиляции, а не в рантайме.Пример:
import jakarta.data.repository.Find;
import jakarta.data.repository.Insert;
import jakarta.data.repository.Repository;
@Repository
interface Publishing {
@Find
Book book(String isbn);
@Find
Author author(String ssn);
@Insert
void publish(Book book);
@Insert
void create(Author author);
// query methods
...
}
Больше деталей можно прочитать в официальной документации Hibernate и в блоге Гевина Кинга (часть 1 и часть 2).
#hibernate
🔥9✍5👍5💩3👌1
if-else в новом стиле:// Before Java 23:
if (condition) {
// ...
} else {
// ...
}
// Since Java 23:
switch (condition) {
case true -> // ...
case false -> // ...
}
Всё благодаря JEP-455 😁. Будете так писать?
Please open Telegram to view this post
VIEW IN TELEGRAM
👀14 13👎10😁8🔥3🥴3 2
Похоже, что Lilliput скоро попадёт в мейнстрим OpenJDK. Роман Кеннке засабмитил пулл-реквест, который имплементирует JEP 450: Compact Object Headers (Experimental). Если пулл-реквест будет одобрен, то можно будет включать сжатые заголовки с помощью ключа -
Если всё будет хорошо, то Lilliput попадёт в Java 24.
#lilliput
XX:+UseCompactObjectHeaders. Правда пока это будут 64-битные заголовки, а не 32-битные (они будут следующим этапом). Но это всё равно отлично.Если всё будет хорошо, то Lilliput попадёт в Java 24.
#lilliput