Java 23: czyli JDK w preview

bartlomiejchmielewski.pl 3 miesięcy temu

Za kilka dni debiutuje Java 23. Nie jest to LTS. Ale warto rzucić rzucić okiem, jakie pojawią się w niej nowości.

Czy warto przeskoczyć na nową wersję, czy nie?

Nowości w JDK 23: Co przynosi nam nowa Java?

Java to język programowania, który od lat nieustannie ewoluuje, oferując programistom coraz bardziej zaawansowane narzędzia i funkcjonalności. W najbliższym czasie, 17 września 2024 roku, swoją premierę będzie miała nowa wersja JDK 23. W tej wersji pojawi się wiele interesujących i potencjalnie rewolucyjnych zmian… jednak większość jest w preview.

Przejdźmy przez najważniejsze JEP-y (Java Enhancement Proposals), które wprowadza JDK 23.

JEP 455: Primitive Types in Patterns, instanceof, and switch (Preview)

Pierwsza nowość to usprawnienie pracy z prostymi typami w kontekście wzorców, operatora instanceof oraz instrukcji switch. Ta funkcja jest w tej chwili w wersji zapoznawczej (preview) i umożliwia korzystanie z wzorców także dla typów prymitywnych, co w przyszłości może znacząco uprościć kod i uczynić go bardziej zrozumiałym.

Poniżej przykład z dokumentacji. Wygląda całkiem ok.

switch (x.getYearlyFlights()) { case 0 -> ...; case 1 -> ...; case 2 -> issueDiscount(); case int i when i >= 100 -> issueGoldCard(); case int i -> ... appropriate action when i > 2 && i < 100 ... }

JEP 466: Class-File API (Second Preview)

JEP 466 to druga zapowiedź nowego API do pracy z plikami klas w Javie. Pozwala ono na bardziej bezpośrednią i wydajną manipulację strukturą pliku .class. Zamiast korzystać z bardziej niskopoziomowych narzędzi, programiści uzyskają wyższy poziom abstrakcji, co ułatwi modyfikacje i analizę plików.

Ale nie ma się co oszukiwać, kilka osób z tego skorzysta w swojej pracy.

JEP 467: Markdown Documentation Comments

Znaczącą zmianę stanowi wprowadzenie możliwości używania komentarzy dokumentacyjnych w formacie Markdown. Ułatwi to tworzenie czytelnej i estetycznej dokumentacji. Programiści będą mogli korzystać z bogatych możliwości tego formatu, takich jak nagłówki, listy, kod blokowy czy linki, żeby lepiej wyjaśniać funkcjonalności swojego kodu.

Szczerze… kilka lat temu pewnie bym powiedział: wow, w końcu! w tej chwili moje odczucia to raczej what ever.

JEP 469: Vector API (Eighth Incubator)

To już ósma inkubacja Vector API, co oznacza, iż funkcja ta jest przez cały czas rozwijana, testowana i udoskonalana. Vector API zakłada wprowadzenie operacji wektorowych dla lepszego wsparcia przetwarzania równoległego, co może znacząco przyspieszyć niektóre operacje matematyczne i algorytmiczne.

Wpływ wszechobecnego AI sprawia, iż każda zmiana w tym obszarze będzie mile widziana. Zwłaszcza przez twórców bibliotek.

JEP 473: Stream Gatherers (Second Preview)

Funkcja Stream Gatherers w swojej drugiej zapowiedzi wprowadza możliwość efektywniejszego zbierania danych w strumieniach. Ułatwia to przetwarzanie dużych ilości danych oraz agregację wyników, co jest szczególnie przydatne w analizie danych i operacjach na dużych zbiorach informacji.

JEP 471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal

Kolejny JEP dotyczy deprecjonowania metod dostępu do pamięci w klasie sun.misc.Unsafe. W dłuższej perspektywie metody te zostaną usunięte. Uzasadnieniem jest bezpieczeństwo i stabilność aplikacji, gdyż korzystanie z tych metod może prowadzić do nieprzewidywalnych zachowań.

JEP 474: ZGC: Generational Mode by Default

Domyślne włączenie trybu generacyjnego w Z Garbage Collector (ZGC) jest znaczącym usprawnieniem. Nowa konfiguracja pozwala na lepszą efektywność zarządzania pamięcią poprzez rozdzielenie obiektów na generacje. To może znacząco zmniejszyć czas przestoju aplikacji związany z odzyskiwaniem pamięci.

Generalnie młodsze generacje będą szybciej wyrzucane z pamięci, gdy nie będą już potrzebne.

JEP 476: Module Import Declarations (Preview)

Ten JEP wprowadza deklaracje importu modułów, co jest nową funkcjonalnością pozwalającą na bardziej czytelne i zorganizowane używanie modułów w Javie. Funkcja znajduje się w wersji preview i potencjalnie może upraszczać zarządzanie zależnościami w projektach.

Jak będzie zobaczymy, potencjał jest.

JEP 477: Implicitly Declared Classes and Instance Main Methods (Third Preview)

Klasy deklarowane jawnie oraz instancyjne metody main() to funkcje w trzeciej wersji zapowiedzi. Dzięki nim programiści mogą pisać jeszcze bardziej zwięzły kod, co jest szczególnie użyteczne w rozwiązaniach edukacyjnych oraz szybkich prototypach.

Java 23 pozwoli więc na program wyglądający w ten sposób:

void main() { println("Hello, World!"); }

JEP 480: Structured Concurrency (Third Preview)

Strukturalna współbieżność, również w trzeciej wersji zapowiedzi, umożliwia tworzenie bardziej niezawodnych i zrozumiałych aplikacji wielowątkowych poprzez strukturalne zarządzanie zadaniami i ich hierarchią. To może znacznie poprawić czytelność i utrzymywalność kodu współbieżnego.

A w efekcie powinno być mniej błędów.

JEP 481: Scoped Values (Third Preview)

Trzecia zapowiedź JEP 481 dotyczy wartości zakresowych, które umożliwiają bardziej zrozumiałe i bezpieczne przekazywanie wartości przez różne zakresy życia obiektów. To kolejny krok w kierunku tworzenia bardziej czytelnego i mniej podatnego na błędy kodu.

JEP 482: Flexible Constructor Bodies (Second Preview)

Elastyczne ciała konstruktorów, w drugiej wersji zapowiedzi, pozwalają na pełniejsze korzystanie z konstruktorów przy inicjalizacji obiektów. Programiści mogą teraz tworzyć bardziej złożone i elastyczne procesy inicjalizacyjne, co może być przydatne w skomplikowanych projektach.

Fajnie będzie tak sobie wywołać super() nie na początku konstruktora.

Podsumowanie

JDK 23 przynosi wiele nowości, które mogą znacząco wpłynąć na sposób, w jaki programujemy w Javie. Od usprawnień w pracy z typami prymitywnymi, przez nowoczesne/nowocześniejsze podejście do dokumentacji, aż po zmiany w zarządzaniu pamięcią i współbieżnością – z pewnością znajdzie się coś dla wszystkich. Warto już teraz rozpocząć testowanie tych nowości, aby jak najlepiej wykorzystać potencjał, jaki oferuje nowa wersja JDK.

O kolejnych wydaniach Javy możesz przeczytać w artykułach:

  • Java 23: czyli JDK w preview
  • Java 18 – co nowego?
  • Java 17 – co nowego?
  • Java 16 Przegląd Nowości
  • Java 15 – co nowego w JDK? oraz Java 15 General Availability
  • Java 14 – co nowego?

Idź do oryginalnego materiału