23 maja 1995 światło dzienne ujrzała Java – język programowania, o którym bez przesady można powiedzieć, że zmienił nasze myślenie o wieloplatformowym oprogramowaniu. Dzięki uniwersalnemu środowisku uruchomieniowemu w postaci maszyny wirtualnej, jak nigdy dotąd zbliżyliśmy się realizacji koncepcji, w której raz napisany kod działa będzie na wielu różnych urządzeniach różnej klasy z różnymi systemami operacyjnymi. W tym roku Java obchodzi 25. urodziny i świętuję je premierą nowej wersji – dostępna jest już Java 14.
Zobacz też: Programiści Java mogą odtąd skorzystać ze specjalnego instalatora Visual Studio Code
25 lat Javy
Według Richa Sharplesa z Red Hata ogromny sukces Javy wziął się między innymi z przejrzystej składni, która sprzyjała pracom utrzymaniowym. Najważniejszym czynnikiem – zwłaszcza w okresie tzw. boomu dotcomów – mogła być jednak gotowość Javy na obsługę protokołów sieciowych, przede wszystkim HTTP. Przez ostatnie dwie dekady Java dobrze adaptowała się do zmieniających się realiów, stając się np. głównym językiem back-endu na Androidzie. Dopiero niedawno Google zaczęło promować jako jej zamiennik język Kotlin.
Przeczytaj także: Java 13 dostępna. Liczba nowości maleje z wydania na wydanie
Osobną kwestię stanowi jednak cykl wydawniczy Javy oraz konsekwencje zmian wprowadzonych po premierze wersji 8. W rezultacie porzucenia części API lwia część programistów nie znalazła argumentów na rzecz migracji, zwłaszcza że wymagałoby te przepisywania niekiedy całego kodu. Oracle boryka się więc z problemem – kolejne wersje Javy nie są już tak istotnym wydarzeniem, a implementacja kolejnych JEP-ów nie wystarcza, by to zmienić. Zwłaszcza, że język traci także systematycznie na popularności i wielu rankingach zajmuje, już nie drugie, lecz trzecie miejsce, za JavaScriptem i Pythonem.
Przeczytaj też: StackOverflow Developer Survey 2019 – Python i Visual Studio Code biorą wszystko
Java 14 – co nowego?
Przyjrzyjmy się zatem nowościom, które pojawiły się w najnowszej, jubileuszowej wersji Javy. Nowości jest relatywnie sporo, gdyż Java 14 implementuje więcej JEP-ów niż wersje 12. i 13. łącznie – w stabilnej wersji jest ich 11, dwie kolejne dostarczane są postaci paczek incubator, a cztery nowości pojawiły się w wersji poglądowej:
- JEP 305 (Preview) – pattern matching dla operatorów, czyli technika sprawdzania, czy jakieś wyrażenie zawiera element, a jeśli tak, to umożliwia jego warunkową ekstrakcję.
- JEP 345 – (Incubator) – nowe narzędzie do pakowania bazujące na JavaFX, które ułatwi końcowy użytkownikom instalację (formaty MSI, EXE, PKG, DMG, DEB i RPM), pozwoli na uruchamianie programu z parametrami oraz może być wywołane z poziomu wiersza poleceń.
- JEP 349 – poprawki zwiększające wydajność garbage collectora G1, dzięki implementacji alokacji pamięci obsługującej NUMA.
- JEP 352 – nowy mechanizm mapowania plików umożliwiający wykorzystanie API FileChannel do tworzenia instancji MappedByteBuffer, które nie odnoszą się do pamięci nieulotnych.
- JEP 358 – wyjątek NullPointerException będzie odtąd wskazywać, która zmienna miała wartość null.
- JEP 359 (Preview) – records, czyli składnia umożliwiająca deklarowanie klas, które dla danych, które się nie zmieniają.
- JEP 361 – nowości w wyrażeniach switch, czyli bodaj największa nowośc w Javie 14. Odtąd switchami mogą być instrukcje i wyrażenia. JEP był już dostępy testowo w Javie 12 i 13, a docelowo ma pozwolić na pattern matching dla wyrażeń switch.
- JEP 362 – porzucenie obsługi portów Solaris i SPARC.
- JEP 364 – usunięcie garbage collectora CMS.
- JEP 365 – garbage collector ZGC został przeportowany zarówno na macOS-a, jak i Windowsa
- JEP 366 – porzucenie obsługi kombinacji Parallel Scavenge i garbage collectora SerialOld.
- JEP 367 – usunięto narzędzie i API Pack200.
- JEP 368 (Prieview) – obsługa bloków tekstów (Text Blocks), czyli rozciągających się na wiele linijek literałów.
- JEP 370 (Incubator) – obsługa API Foreign-Memory Access.
Więcej szczegółowych informacji na temat nowości w Javie 14 znaleźć można m.in. na stronach OpenJDK. Premiery Javy 15 spodziewamy się za 6 miesięcy.