Da 25 anni Java ha continuato a trasformarsi e dal 2018 in poi la sua evoluzione è stata scandita di sei mesi in sei mesi dal lancio di una nuova versione. Con Java 20, appena rilasciata da Oracle, il linguaggio di programmazione (allo stesso tempo piattaforma di sviluppo) introduce sette JDK Enhancement Proposal e fa un salto in avanti in termini di prestazioni, stabilità e sicurezza, oltre a introdurre nuove funzioni che semplificano la scrittura di codice.
“Per oltre 25 anni, Java ha permesso agli sviluppatori di progettare e costruire nuove generazioni di applicazioni solide, scalabili e sicure", ha dichiarato Georges Saab, senior vice president of development, Java Platform e chair, OpenJDK Governing Board di Oracle. "I nuovi e innovativi miglioramenti di Java 20 riflettono la visione e l'impegno profuso dalla community globale di Java durante tutta la sua esistenza. Grazie al supporto fornito dalla leadership tecnologica Java di Oracle e dalla gestione della community, Java è diventato estremamente importante come linguaggio e piattaforma che aiuta gli sviluppatori a aumentare la loro produttività".
La maggior parte degli aggiornamenti di Java 20 sono funzioni di follow-up che migliorano funzionalità introdotte nelle release precedenti. Tra le altre cose spiccano miglioramenti al linguaggio derivanti da OpenJDK Project Amber (Record Patterns e Pattern Matching for Switch), miglioramenti da OpenJDK Project Panama per interconnettere Java Virtual Machine (JVM) e codici nativi (Foreign Function & Memory API e Vector API) e funzionalità correlate a Project Loom (Scoped Values, Virtual Threads, e Structured Concurrency), che semplificheranno notevolmente il processo di scrittura, manutenzione e osservazione di applicazioni concomitanti a throughput elevato.
Queste, nel dettaglio, le novità di Java 20:
Aggiornamenti e miglioramenti al linguaggio
-
JEP 432: Record Patterns (seconda anteprima): Migliora il linguaggio Java consentendo agli utenti di aggiungere pattern di registro e pattern di tipo e creare così una tipologia di navigazione ed elaborazione dati potente, dichiarativa e componibile. Ciò aiuta ad aumentare la produttività degli sviluppatori permettendo loro di estendere il pattern matching per consentire query di dati più sofisticate e componibili.
-
JEP 433: Pattern Matching for Switch (quarta anteprima): Estendendo il pattern matching alle istruzioni switch, le espressioni possono essere testate rispetto a vari pattern, ciascuno con un'azione specifica, e l’espressione di query complesse basate sui dati può avvenire in modo conciso e sicuro. Ampliare l'espressività e l'applicabilità delle espressioni e delle istruzioni switch aiuta ad aumentare la produttività degli sviluppatori.
Funzioni di anteprima/incubatrici Project Loom
-
JEP 429: Scoped Values (incubatrice): Permette la condivisione di dati immutabili all'interno di thread e fra thread, preferibili rispetto a variabili thread-local soprattutto quando si utilizza un numero elevato di thread virtuali. Ciò aumenta la facilità d'uso, la comprensibilità, la robustezza e le prestazioni.
-
JEP 436: Virtual Threads (seconda anteprima): Semplifica notevolmente il processo di scrittura, manutenzione e osservazione di applicazioni concomitanti a throughput elevato introducendo thread virtuali leggeri nella Java Platform. Consentendo agli sviluppatori di risolvere facilmente i problemi, di eseguire il debugging, e di profilare delle applicazioni concomitanti con gli strumenti e le tecniche JDK esistenti, i thread virtuali aiutano ad accelerare lo sviluppo delle applicazioni.
-
JEP 437: Structured Concurrency (seconda incubatrice): Semplifica la programmazione multithreaded trattando vari task in esecuzione in thread diversi come un'unica unità di lavoro. Questo aiuta i team di sviluppo a semplificare la gestione e la risoluzione degli errori, ad aumentare l'affidabilità e a migliorare l'osservabilità.
Funzioni di anteprima Project Panama
-
JEP 434: Foreign Function & Memory API (seconda anteprima): Permette ai programmi Java di interagire con codice e dati al di fuori del runtime Java. Richiamando in modo efficiente funzioni straniere (cioè, codici al di fuori di Java Virtual Machine [JVM]) e accedendo in tutta sicurezza a una memoria straniera (cioè, una memoria non gestita da JVM). Questa funzione permette ai programmi Java di chiamare librerie native ed elaborare dati nativi senza aver bisogno di una Java Native Interface. Ciò migliora la facilità d'uso, le prestazioni e la sicurezza.
-
JEP 438: Vector API (quinta incubatrice): Esprime calcoli vettoriali che si compilano in modo affidabile in fase di esecuzione per istruzioni vettoriali su architetture CPU supportate. Ciò aumenta le prestazioni rispetto ai calcoli scalari equivalenti.
La release numero 20 è supportata da Java Management Service, un servizio nativo della Oracle Cloud Infrastructure, che permette alle aziende di gestire runtime e applicazioni Java on-premise o in qualsiasi cloud attraverso un pannello di controllo unico.