Java 18 wychodzi już za parę dni. A konkretnie 22 marca. Finalnie zobaczymy w niej dziewięć nowych funkcji. A co dokładnie nowego znajdziemy w tej edycji. O tym wszystkim dowiesz się tutaj.
Java 18
Dziewięć nowych funkcji w trzech obszarach. Powiedziałbym, iż w ostatnich latach Java nas nie rozpieszczała przy kolejnych wydaniach. Ale to wydanie wydaje się wyjątkowo małe. W każdym razie od Java 12 i 13 (osiem zmian w 2018 i pięć w 2019) jest to najmniejsza paczka pod względem liczby proponowanych zmian. Dotyczą one obszarów:
- Core Java Library (7 zmian),
- Java Tools (1 zmiana),
- Java Specification (1 zmiana).
A oto lista:
Obszar | JDK Enhancement Proposal (JEP) |
Core Java Library | 400: UTF-8 by Default 408: Simple Web Server 416: Reimplement Core Reflection with Method Handles 417: Vector API (Third Incubator) 418: Internet-Address Resolution SPI 419: Foreign Function & Memory API (Second Incubator) 421: Deprecate Finalization for Removal |
Java Tools | 413: Code Snippets in Java API Documentation |
Java Specification | 420: Pattern Matching for switch (Second Preview) |
Core Java Library
Wg mnie bardzo fajną zmianą, choć niekoniecznie specjalnie medialną, jest 400: UTF-8 by Default. Przede wszystkim załatwi to w dużej mierze sprawę uruchamiania aplikacji z domyślnym charsetem.
Dla przypomnienia, do tej pory jeżeli charset nie był przekazywany w parametrze, to Java wybierała domyślny na podstawie runtime. Czyli pod uwagę brana była instalacja Javy w systemie operacyjnym, ustawienia użytkownika i tym podobne rzeczy.
W efekcie mogło się zdarzyć, o czym każdy doświadczony developer wie, iż nasza aplikacja mogła nie zachowywać się najlepiej. Teraz przynajmniej ten problem zostanie trochę rozwiązany.
Idźmy dalej. Prosty web server, czyli 408: Simple Web Server. W zeszłym tygodniu zastanawiałem się, czy takie rozwiązanie ma sens. Bo w zasadzie jest takich mini serwerów mnóstwo. Ale doszedłem do wniosku, iż umieszczenie tego w Javie ma zdecydowanie kilka plusów.
Przede wszystkim, gdy programujesz od kilku lat, to wiesz, iż taki serwer to nie problem. Uruchamiasz na przykład coś z npm. I już.
Ale… gdy zaczynasz programować… No właśnie, gdy zaczynasz programować, to wszelkie rzeczy są pomocne. I wówczas zwykle nie wiesz, co to jest web serwer i jak go ściągnąć, uruchomić, itp.
Dlatego uważam, iż umieszczenie tego rozwiązania w Javie to dobry pomysł, który ułatwi początkującym naukę.
Poprawki w wewnętrznej implementacji API refleksji dostarczone będą poprzez 416: Reimplement Core Reflection with Method Handles. Wewnętrzne, czyli z naszego punktu widzenia nic się nie zmieni. JEP wspomina, iż w niektórych scenariuszach benchmarkowych wydajnościowych nowa implementacja wypada gorzej o 51-77%. Jednak to benchmarki i biorą pod uwagę specyficzne zachowania. W typowym oprogramowaniu nie powinniśmy zauważać większych różnic.
Przełożeniem instrukcji wektorowych na realizację zadania na CPU to 417: Vector API (Third Incubator). Tu cały czas walka toczy się o optymalne rozwiązanie.
418: Internet-Address Resolution SPI to zmiana z projektu Loom. Dzięki niej mamy zyskać możliwość rozwiązywania nazw hostów na IP bez wykorzystania DNS i plików hosts z systemu operacyjnego. jeżeli chodzi o Loom, to pamiętamy, iż dotyczy on wątków wirtualnych. Dlatego możliwość zamiany blokującego pytania systemu operacyjnego na coś nieblokującego jest tutaj mocno wskazana.
Powoli do przodu idą też prace związane z wywoływaniem obcych funkcji i dostępem do pamięci spoza JVM. Drugi raz w inkubatorze widzimy to w postaci 419: Foreign Function & Memory API (Second Incubator). Trudny obszar.
Zapowiedź pożegnania z finalize() (np. java.lang.Object.finalize()) mamy w 421: Deprecate Finalization for Removal. Na razie jest to tylko oznaczenie, ale widać, iż w końcu Java pozbędzie się tego błędogennego mechanizmu.
Java Tools
413: Code Snippets in Java API Documentation to niby nic wielkiego. Bo wprowadzono tag @snippet do dokumentacji. Będziemy mieli troszkę ładniej sformatowane przykłady. Mały rzecz, a oko mam nadzieję będzie cieszyć.
Jeśli chodzi o zastosowanie, to mam wątpliwość. Głównie chodzi o kod biznesowy, w którym generalnie i tak zwykle za dużo przykładów się nie pojawia.
Z kolei w różnych bibliotekach myślę, iż to się przyda. I autorzy będą mieli trochę łatwiej przy dokumentowaniu swoich rozwiązań.
Java Specification
W tym wydaniu dostajemy też kontynuację w ramach projektu Amber. 420: Pattern Matching for switch (Second Preview). to coraz dłużej wyczekiwany pattern matching w instrukcji switch. Przykład z JEP:
Ostatnio pisałem, o tym, iż osoby ze świata Scali mogą się tu trochę pośmiać. Bo dla Scali tego typu konstrukcje są normalne Ale w Javie to cały czas nowość. Szkoda tylko, iż żeby przyjęło się to w kodzie w oprogramowaniu korporacyjnym to będziemy czekać do kolejnego wydania LTS.
Java 18 – podsumowanie
No i fajnie. Java 18 zaraz będzie dostępna. To wydanie moim zdaniem nie jest jakimś dużym krokiem naprzód. Zawiera kilka zmian, które cały czas przygotowują Javę do większych modyfikacji w niedalekiej przyszłości.
Dla mnie najciekaszy pozostaje temat 420: Pattern Matching for switch (Second Preview).
A dla Ciebie? Która ze zmian jest wg Ciebie ciekawa?
O kolejnych wydaniach Javy możesz przeczytać w artykułach:
- 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?