Dopo sei mesi di sviluppo, Oracle ha rilasciato la piattaforma Java SE 19 (Java Platform, Standard Edition 19), utilizzando il progetto OpenJDK come implementazione di riferimento. Fatta eccezione per la rimozione di alcune funzionalità obsolete, Java SE 19 mantiene la retrocompatibilità con le versioni precedenti della piattaforma Java: la maggior parte dei progetti Java precedentemente scritti funzionerà senza modifiche quando eseguiti con la nuova versione. Le versioni pronte per l'installazione di Java SE 19 (JDK, JRE e Server JRE) sono disponibili per Linux (x86_64, AArch64), Windows (x86_64) e macOS (x86_64, AArch64). L'implementazione di riferimento di Java 19, sviluppata nell'ambito del progetto OpenJDK, è completamente open source sotto la licenza GPLv2 con eccezioni GNU ClassPath che consentono il collegamento dinamico con prodotti commerciali.
Java SE 19 è classificato come rilascio con un ciclo di supporto standard, gli aggiornamenti saranno rilasciati fino al prossimo rilascio. Per un ramo con un ciclo di supporto lungo (LTS), si consiglia di utilizzare Java SE 17, aggiornamenti per il quale saranno rilasciati fino al 2029. Ricordiamo che a partire dal rilascio di Java 10, il progetto ha adottato un nuovo processo di sviluppo, che prevede un ciclo di rilascio più breve. Le nuove funzionalità vengono ora sviluppate in un unico ramo master costantemente aggiornato, in cui vengono inclusi i cambiamenti già pronti e dal quale si diramano rami per la stabilizzazione dei nuovi rilasci ogni sei mesi.
Tra le novità di Java 19 si possono notare:
- È stata proposta una supporto preliminare ai pattern record (record pattern), che amplia la funzionalità di corrispondenza introdotta in Java 16 per l'analisi dei valori delle classi di tipo record. Ad esempio: record Point(int x, int y) {} void printSum(Object o) { if (o instanceof Point(int x, int y)) { System.out.println(x+y); } }
- Nelle build per Linux è stato aggiunto il supporto per l'architettura RISC-V.
- È stato aggiunto il supporto preliminare per l'API FFM (Foreign Function & Memory), che consente l'interazione tra programmi Java e codice e dati esterni tramite la chiamata di funzioni da librerie esterne e l'accesso alla memoria al di fuori della JVM.
- È stato introdotto il supporto per i thread virtuali, che sono thread leggeri che semplificano notevolmente la scrittura e la manutenzione di applicazioni multithread ad alte prestazioni.
- È stata proposta una quarta implementazione preliminare dell'API Vector, che fornisce funzionalità per calcoli vettoriali che vengono eseguiti utilizzando istruzioni vettoriali dei processori x86_64 e AArch64 e consentono di applicare operazioni contemporaneamente a più valori (SIMD). A differenza delle capacità di auto-vettorizzazione delle operazioni scalari fornite dal compilatore JIT HotSpot, il nuovo API consente un controllo esplicito sulla vettorizzazione per l'elaborazione parallela dei dati.
- È stata aggiunta una terza implementazione sperimentale del pattern matching nelle espressioni «switch», che consente di utilizzare nei case non solo valori esatti, ma modelli flessibili che coprono una serie di valori, evitando così ingombranti catene di espressioni «if…else». Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
- È stato aggiunto un API sperimentale per il parallelismo strutturato, che semplifica lo sviluppo di applicazioni multithread gestendo più compiti eseguiti in thread diversi come un unico blocco.
Fonte: opennet.ru
