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.
O kolejnych wydaniach Javy możesz przeczytać w artykułach: