Oracle ha annunciato la disponibilità di Java 21, l’ultima versione del linguaggio di programmazione e della piattaforma di sviluppo. Java 21 (Oracle JDK 21) offre migliaia di miglioramenti in termini di prestazioni, stabilità e sicurezza, inclusi potenziamenti della piattaforma che aiuteranno gli sviluppatori ad aumentare la produttività e a promuovere l’innovazione nelle loro organizzazioni.
Java 21 offre il supporto a lungo termine per almeno 8 anni: per gli sviluppatori e le aziende si tratta di un aspetto essenziale perché assicura la possibilità di mantenere le applicazioni in produzione per un periodo più lungo con una manutenzione minima e di migrare senza patemi.
A questo proposito, raccogliendo i desideri espressi dalla comunità di sviluppo e dalle imprese attive nell’ecosistema Java, Oracle ha anche annunciato che il supporto a lungo termine per Java 11 è esteso almeno fino a gennaio 2032. Gli utenti possono quindi beneficiare di ulteriori 8 anni di supporto e aggiornamenti da parte di Oracle.
Le novità di Java 21 sono al centro di una serie di approfondimenti all’evento Oracle CloudWorld, in corso a Las Vegas (USA).
Aggiornamenti e migliorie di Java 21: quali sono
Con l’avvento di Java 21, gli sviluppatori Oracle hanno introdotto decine di aggiornamenti e migliorie. La maggior parte di esse si concentrano sui progetti OpenJDK Amber, Panama e Loom. Ciascuno dei tre progetti ha obiettivi specifici e contribuisce a rendere Java più efficiente, flessibile e adatto a una varietà di scenari di sviluppo.
Project Amber
Il progetto Amber, ad esempio, si concentra sull’aggiunta di nuove funzionalità e miglioramenti sintattici al linguaggio Java al fine di semplificare la scrittura di codice, migliorare la leggibilità e ridurre la verbosità (quantità di codice necessaria per eseguire una determinata operazione o per esprimere una certa logica). Alcune delle funzionalità introdotte in Amber includono:
- String Templates: Consentono di creare stringhe interpolando valori calcolati durante l’esecuzione dell’applicazione.
- Record Patterns: Estendono il sistema di pattern matching per destrutturare istanze di classi record, semplificando la manipolazione dei dati.
- Pattern Matching for Switch: Rende più espressive le dichiarazioni
switch
consentendo l’uso di pattern nelle etichette delle strutturecase
. In questo modo, il codice da sviluppare per la gestione delle decisioni ne risulta semplificato. - Unnamed Patterns and Variables: Introducono pattern senza nome per interfacciarsi con le varie strutture senza senza specificare il relativo nome o il tipo.
Project Panama
Il progetto Panama è invece focalizzato sull’interoperabilità di Java con codice nativo scritto in altri linguaggi (come C e C++). Uno dei principali obiettivi è semplificare l’invocazione di funzioni esterne e l’accesso alla memoria esterna in modo sicuro ed efficiente senza richiedere l’uso della Java Native Interface (JNI). Alcune delle funzionalità introdotte in Panama includono:
- Foreign Function & Memory API: Introduce un’API per consentire ai programmi Java di interagire con codice e dati al di fuori del runtime Java in modo efficiente e sicuro, senza l’uso di JNI.
- Vector API: Fornisce un’API per esprimere calcoli vettoriali che possono essere compilati in istruzioni vettoriali su architetture CPU supportate, migliorando le prestazioni di calcolo.
Project Loom
Infine, il progetto Loom mira a semplificare la programmazione concorrente in Java introducendo i “virtual threads” (thread virtuali). I thread virtuali sono thread leggeri gestiti a livello di sistema operativo che possono essere creati in grande quantità senza l’overhead associato ai thread tradizionali. Tra le novità appena aggiunte:
- Virtual Threads: Consentono la creazione di molti thread virtuali leggeri senza l’overhead di memoria e svincolandosi dalle gestione dei thread tradizionali.
- Scoped Values: Permettono la condivisione di dati immutabili tra thread.
- Structured Concurrency: Introduce un’API per la concorrenza strutturata, semplificando la gestione dei thread e degli errori in applicazioni che sviluppano attività fortemente concorrenti.
L’azienda fondata da Larry Ellison aggiunge che Java offre prestazioni ottimali, efficienza e innovazione quando viene distribuito nel cloud su Oracle Cloud Infrastructure (OCI). OCI è uno dei primi cloud hyperscale a supportare Java 21. I pacchetti Oracle Java SE, Oracle GraalVM e Java SE Subscription Enterprise Performance Pack sono disponibili gratuitamente su OCI, consentendo agli sviluppatori di creare e distribuire applicazioni che funzionano più velocemente, meglio e con prestazioni ottimizzate.
Java torna a fare amicizia con i programmatori
Il rilascio della versione 21 di Java può essere considerato come una vera e propria pietra miliare. Tanti sviluppatori, già prima che Oracle annunciasse la nuova release, hanno espresso grande interesse per le nuove funzionalità di pattern matching introdotte in questa versione.
Come abbiamo visto brevemente in precedenza, infatti, il pattern matching è una caratteristica che semplifica notevolmente la gestione dei dati e delle condizioni basate sui tipi di dati in Java, rendendo il codice più leggibile ed efficiente.
Grazie al pattern matching è possibile rappresentare tipi di dati algebrici, che sono un concetto fondamentale nella programmazione funzionale. Inoltre, lo sviluppatore può estrarre dati da strutture complesse in modo più diretto, senza la necessità di numerosi controlli con l’operatore instanceof
e senza ricorrere al casting. Un approccio che contribuisce a rendere il codice più pulito e meno soggetto a errori.
Il nuovo sistema di pattern matching introdotto con Java 21 offre inoltre una sintassi chiara e intuitiva per gestire le strutture case
nei programmi.
Infine, ci sono tante novità legate alla gestione dei tipi di dati immutabili ovvero quelli i cui valori non possono essere modificati una volta creati. Viene posto l’accento anche sui tipi di dati facilmente destrutturabili, che possono essere rapidamente suddivisi in parti più piccole. Questa caratteristica è spesso utilizzata quando si accede agli elementi interni di un tipo di dati complesso.
Credit immagine in apertura: iStock.com/Yumi mini