Java Digest #14: Valhalla, Nullability, Layden й інші звірі. Та де їх шукати

💡 Усі статті, обговорення, новини про Java — в одному місці. Приєднуйтесь до Java спільноти!

🙋 Алоха, друзі!

Друзі-школярі, всіх з першим вересня!
Ось і літечку кінець, а хто мав відпустку — той молодець.
Редакторський колектив дайджесту, наприклад — не мав, саме тому у вас, наші найдорожчі, є можливість читати новини серпня.

Попередній дайджест можна переглянути тут.

Ну а ми маємо можливість готувати цей дайджест виключно завдяки ЗСУ і читати ви його зараз можете теж завдяки їм.

Тому швидесенько перед прочитанням ходіть міняти долари, євро та біток і кидати гривні на допомогу нашим Захисникам.

Не пройшов непоміченим JVM Language Summit. На ньому ми отримали такі довгоочікувані апдейти про проєкт Valhalla та багато інших новин.

Вашій увазі пропонується кілька, на наш смак, найкритичніших доповідей:

Також Roman Kennke презентував прогрес іншого важливого проєкту — Lilliput. Він покликаний знизити футпрінт Java, в першу чергу шляхом зменшення заголовків Об’єктів.

В минулому випуску ми писали про новий JDK-8303099, що має на меті додати синтаксис (Foo?, Foo!) для позначення nullability (і Brian Goetz згадує про цю розробку у відео «Valhalla — Where we are?», поданому вище).

Поки цей JEP рухається за Jep progression, ряд компаній включно з Google, Oracle, JetBrains, Microsoft, Sonar, VMware (Spring) визначили стандарт JSpecify. Він переслідує подібні цілі, але використовує анотації та мав би замінити механізми, які деякі з компаній (Spring, JetBrains та інші) розробляли для себе.

JSpecify дає змогу визначати nullability за допомогою чотирьох анотацій — @Nullable і @NonNull для позначення типів, а також @NullMarked і @NullUnmarked для позначення всього у визначеному scope (package, module, etc). Наприклад, за допомогою @NullMarked можна позначити весь код в модулі або пакеті як not nullable, а там де null таки може бути — позначати його за допомогою @Nullable. Оскільки пакети не ієрархічні, це простіше робити на рівні module — тоді весь в код в модулі стане за замовчуванням не nullable.

JEP-8209434 пропонує додати у JVM більш лаконічні тіла для методів та в цілому узгодити форму для тіл методів з формами лямбда-виразів.

Нещодавно в дистрибутиві OpenJDK від Azul — Azul Zulu з’явилася підтримка JavaFX для ARM64 Linux-систем. Для демонстрації ось демо простої JavaFX програми на Raspberry Pi 5 від Frank Delporte. Вона вміщена в один файл і збирається за допомогою J’BANG. Програма виглядає як вікно, в якому хаотично рухаються кульки, кількість яких можна задати в коді. Що більша кількість — то більше навантаження, що дозволяє певною мірою тестувати потужність системи.

Eclipse тепер дозволяє робити third-party reproducible verification build їхнього дистрибутиву Temurin JDK 21+ для перевірки supply chain security. Цей процес допомагає всім охочим відтворити Temurin JDK build і перевірити, чи він на 100% збігається з тим, що вони завантажили з інтернету. А також бути впевненими в тому, які параметри Eclipse використовує для побудови їхнього JDK. Eclipse також почали публікувати свій компілятор GCC як DevKit, щоб і таким чином уникнути ускладнень для потенційних third-party, щоб перевіряти також і його.

JDK 23

Build 37 наразі крайній доступний early-access збірка JDK 23. Більше деталей про неї можна знайти тут.

JDK 24
Став доступним early-access Build 13 JDK 24. Більше деталей можна отримати з реліз ноутів.

З виходом Spring Framework 6.2.0-M7 ми стали ще на крок ближче до глобального релізу версії 6.2.0. Серед цікавих змін варто відзначити додавання обробки помилок у кеш абстракції, можливість для HTTP клієнтських інтерфейсів вказувати статичні заголовки через анотації та кодувати параметри типу Collection у @RequestParam як один рядок у запиті, а також підтримку рендерингу потоку фрагментів через SSE. Із повним списком змін можна ознайомитися тут.

Також з моменту виходу попереднього дайджесту команда Spring виправила низку вразливостей CVE, зокрема, CVE-2024-38807 (уразливість підробки підписів), CVE-2024-38808 (DoS через вирази SpEL) та CVE-2024-38809 (DoS через умовні HTTP-запити). Більше інформації про це тут і тут. Редакція вкотре наголошує на важливості оновлення ваших проєктів для мінімізації ризиків, пов’язаних із вразливостями.

Spring Boot 3.4.0-M2 містить багато нових змін. З цікавого відзначимо наступне:

  • Додана підтримка Grafana LGTM.
  • З’явився новий ендпоінт для Actuator, який дозволяє отримувати інформацію про SSL-бандли.
  • Тепер за допомогою /actuator/scheduledtasks ви можете отримати додаткову інформацію, таку як час наступного запланованого виконання, час останнього виконання, статус та помилки.
  • Додана можливість простіше створювати додаткові біни за допомогою @Bean(defaultCandidate=false).

Spring Security 6.4.0-M2 також містить доволі багато змін. З цікавого:

  • Розширена підтримка виразів з плейсхолдерами в анотаціях @AuthenticationPrincipal та @CurrentSecurityContext.
  • Додано можливість вказувати OAuth2ClientHttpRequestInterceptor для RestClient.

Зяʼвились нові версії Spring for Apache Kafka 3.3.0-M2, 3.2.3 та 3.1.8. У версії 3.3.0-M2 клієнт Kafka було оновлено до 3.8.0. Детальніше за посиланням.

Також були опубліковані нові версії Spring Authorization Server 1.4.0-M1, 1.3.2 та 1.2.6. Основними змінами стали виправлення помилок і оновлення залежностей до останніх версій. У версії 1.4.0-M1 додано підтримку параметра OpenID Connect 1.0 prompt=none, можливість кастомізації LogoutHandler в OidcLogoutEndpointFilter, а також додано AuthenticationDetailsSource до OAuth2TokenRevocationEndpointFilter.

Spring Modulith 1.3 M2, 1.2.3, та 1.1.8 також містять виправлення помилок і оновлення залежностей до останніх версій. У версії 1.3 M2 додано підтримку вкладених модулів. Детальніше про цю та інші зміни за посиланням.

Основною зміною у Spring Session 3.4.0-M2 стала можливість кастомізації політики закінчення терміну дії сесій Redis.

Реліз Spring Cloud 2024.0.0-M1 (aka Mooregate) не включає нових змін. Основною метою стало додавання підтримки Spring Boot 3.4.0-M1.

Spring for Apache Pulsar 1.2.0-M1 включає дві помітні зміни:

  • Додано підтримку кастомних ObjectMapper.
  • Зʼявилася можливість вказування дефолтного тенанта та простору імен.

Spring AI 1.0.0 M2 містить значні покращення та нові функції в модулях Vector Store, ChatModel, а також у ряді інших компонентів. Детальна інформація за цим посиланням.

Також варто звернути увагу на наступні релізи:

Цього разу ми хочемо поділитися з вами чотирма новими відео із серії Spring Tips.

У першому відео Джош Лонг розповідає про HTMX — бібліотеку, яка дає змогу безпосередньо використовувати AJAX, CSS-переходи, WebSockets та Server-Sent Events у HTML за допомогою атрибутів, що спрощує створення сучасних інтерфейсів користувача. Він також демонструє, наскільки легко інтегрувати HTMX зі Spring Boot та Thymeleaf.

У наступному відео Джош знову розповідає про Spring Security, приділяючи особливу увагу інтеграції з Auth0 — платформою, яка забезпечує сервіси автентифікації та авторизації.

Звісно, Джош не міг оминути увагою Spring AI. Цього разу він зосередився на нових змінах, пов’язаних з відстежуванням різноманітних метрик.

В останньому відео Джош розповідає про нововведення, яке з’явиться у Spring Security 6.4, а саме про підтримку одноразових паролів.

Наприкінці серпня відбулася конференція SpringOne. Усі відео з конференції доступні за цим посиланням. Серед доповідей, які можуть вас зацікавити, ми хотіли б виділити дві презентації від Paul Bakker, де він ділиться досвідом Netflix.

А також доповідь від Rob Winch, присвячену Spring Security 6.4.

Christian Tzolov продовжує ділитися новинами про Spring AI та нові інтеграції. Цього разу він написав статтю, в якій розповідає про появу підтримки NVIDIA LLM API. Він також написав матеріал про появу підтримки OpenAI’s Structured Outputs. Цей функціонал значно покращує надійність і зручність використання AI-згенерованого контенту в реальних застосунках.

У попередньому дайджесті ми повідомляли, що Spring Boot 3.4 додасть підтримку структурованого логування. Цього разу хочемо поділитися статтею від Moritz Halbritter, в якій більш детально описано це нововведення.

Sébastien Deleuze опублікував статтю, в якій розповідає про CDS та нові зміни у Spring Boot 3.3, що допомогли розкрити його потенціал. Крім того, він поділився результатами тестування з останньою збіркою Project Leyden.

В Azul згадують про пришвидшення часу старту Java-програм і дивляться на це з погляду embedded девайсів, а також Cloud waste. В цьому контексті Azul вирішив нагадати про AOT vs JIT та інші рішення, які стараються знайти золоту середину — всім відомий CRaC, його «простіша» версія CRaM, а також cloud рішення від Azul — ReadyNow warmup technology. ReadyNow Orchestrator збирає профайл-інформацію з «розігрітого» сервісу (hot spots, profiling data, в деяких випадках вже скомпільований код) і передає її новим сервісам як параметр для старту. Крім цього Azul також нагадує про свою платформу Azul Prime і дистрибутив OpenJDK Azul Zing, який містить in-house розробки Azul — компілятор C4 і Falcon JIT LLVM-based компілятор.

AWS презентували migration tool для автоматизованої міграції з AWS Java sdk v1 до v2, що використовує OpenRewrite зі специфічними для AWS налаштуваннями й додає команди rewriteDryRun і rewriteRun. Поки що цей плагін знаходиться на етапі preview.

  • Опублікована нова Scala версії 3.5.0. Серед новинок є включення Scala CLI в стандартний Scala distribution, pipelined compilation, що має пришвидшити компіляцію мульти модульних проєктів, vars в type refinements та інше. Більше можна дізнатись в блог пості або в release notes. Scala 3.5.0 не є LTS-версією, нею залишається Scala 3.3.3
  • Також в Scala є нова hotfix-версія 3.4.3 що виправляє деякі проблеми з binary incompatibility, які з’явилися в Scala 3.4.2. А ще стаття-передження про майбутні зміни в Scala 3.7 про новий порядок пріоритезації given-компілятором, який може бути не сумісний зі Scala-кодом поточних версій.
  • в Oracle з’явилася перша версія v0.5.0 нової експериментальної DSL-мови Sandwood для програмування моделей ймовірностей (probabilistic models). Мова використовує розширення .sandwood, свій спеціальний синтаксис (схожий на java) і заготовлені алгоритми популярних probability distributions (Bernoulli, beta, etc). В репозиторії є приклади (наприклад: coin flip bias і hmm, lda), компілятор, що компілює .sandwood в java класи (безпосередньо компілятор написаний на java) і maven-плагін, що використовує компілятор.
  • За останні декілька місяців про Tiered storage для Kafka писали RedHat, UberAWS, а на InfoQ вийшла стаття, яка підсумовує ці блоги і наводить ще декілька аргументів про плюси, мінуси і обмеження Tiered storage.
  • В IBM з’явилася стаття, яка нагадує основні патерни для message queues (One-to-many, Many-to-many, filtering, browsing, etc) в контексті IBM MQ i JMS. Разом з цим можна згадати про Kafka Queues, що знаходяться в активній розробці.

Вже доволі давно тривають судові спори GitHub Copilot проти приватних осіб.

У новому рішенні суддя відхилив більшість претензій у справі проти GitHub Copilot, залишивши лише дві ключові вимоги щодо порушення ліцензії з відкритим кодом та контракту. Рішення стало серйозним ударом для групи розробників, які звинувачували GitHub та OpenAI у неправомірному використанні їхнього коду.

Суддя відхилив основні звинувачення щодо порушення авторського права через те, що Copilot не відтворює суттєво подібний код, що ставить під сумнів обґрунтованість претензій. Проте справа продовжуватиметься, і юридичні питання навколо використання ШІ у програмуванні залишаються актуальними. Детальніше можна прочитати тут.

Друзі, нам важлива ваша думка! Поділіться в коментарях ідеями — як нам варто покращувати цей дайджест та які новини вам цікаво читати?

Над дайджестом працювала команда Avenga:

Подобається дайджест? Підписуйтесь на автора, щоб отримувати сповіщення про нові публікації на пошту.

👍ПодобаєтьсяСподобалось9
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Дякую за дайджест.

youtu.be/IF9l8fYfSnI

Одна з кращих останніх доповідей по Java, дуже радий за Брайана й за всіх, хто доклав зусиль до проєкту. Сподіваюсь нарешті побачимо реліз.

Дякую, що продовжуєте включати новини про Scala! Нам скала розробникам дуже приємно, і цікаво читати ваші дайджести 😊

Дякуємо, нам набагато приємніше (і хотілось би мати більше підстав) згадувати Scala, аніж kotlin

Підписатись на коментарі