Kategorie
java

Java 23: czyli JDK w preview

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 obecnie 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ć, niewiele 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! Obecnie moje odczucia to raczej what ever.

JEP 469: Vector API (Eighth Incubator)

To już ósma inkubacja Vector API, co oznacza, że funkcja ta jest nadal 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, że 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 każdego. Warto już teraz rozpocząć testowanie tych nowości, aby jak najlepiej wykorzystać potencjał, jaki oferuje nowa wersja JDK.

5 1 vote
Article Rating
Subscribe
Powiadom o
guest
0 komentarzy
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Jestem ciekawy, co myślisz. Dodaj komentarz na dole!x