Vi presentiamo Kotlin 2.0, l’ultimo aggiornamento nella storia di uno dei linguaggi di programmazione più popolari per lo sviluppo software. Ad ogni nuova versione, Kotlin spinge i confini dello sviluppo contemporaneo, offrendo ai programmatori una combinazione di sicurezza, espressività e concisione.

In questo articolo esploriamo le funzionalità e i miglioramenti all’avanguardia di Kotlin 2.0, che ha il potenziale di trasformare completamente il modo in cui gli sviluppatori creano applicazioni. Scopriamo le novità più interessanti della sua versione più recente, dai concetti di sintassi avanzati al solido supporto degli strumenti.
Indice dei contenuti
- Quali sono le novità di Kotlin 2.0?
- Supporto IDE
- Integrazione multipiattaforma senza interruzioni
- Nuova modalità K2
- Velocità di compilazione migliorata
- Supporto per i plugin di compilazione
- Kotlin/JVM
- Kotlin/Native
- Kotlin/Wasm
- Kotlin/JS
- Miglioramenti di Gradle
- Biblioteca standard
- Conclusione
Quali sono le novità di Kotlin 2.0?
Una nuova modalità di compilazione K2, un supporto multipiattaforma migliorato, una compilazione più veloce e diverse modifiche per Kotlin/JVM, Kotlin/Native, Kotlin/Wasm e Kotlin/JS sono solo alcune delle interessanti novità introdotte dall’ultima versione. Per accelerare ulteriormente il processo di sviluppo, l’integrazione con il sistema di build Gradle è stata ottimizzata e la libreria standard ha subito notevoli miglioramenti.

Supporto IDE
I plugin che supportano Kotlin 2.0.0 sono inclusi nelle versioni più recenti di Android Studio e IntelliJ IDEA. Non è necessario aggiornare il plugin nel tuo IDE. È sufficiente modificare gli script di build per integrare Kotlin 2.0.0.
Integrazione multipiattaforma senza interruzioni
Una delle sue caratteristiche più notevoli è il supporto migliorato per i progetti multipiattaforma. Con questa versione, la condivisione del codice tra piattaforme è ora più semplice che mai, riducendo le duplicazioni e garantendo la coerenza tra tutte le applicazioni. Indipendentemente dal tuo obiettivo di sviluppo (JVM, nativo, JavaScript o la piattaforma WebAssembly (Wasm) recentemente rilasciata), Kotlin 2.0 offre gli strumenti e le librerie necessari per facilitare uno sviluppo multipiattaforma efficace.
Nuova modalità K2
Una delle caratteristiche principali di Kotlin 2.0 è la nuova modalità di compilazione K2, che offre un processo di compilazione più affidabile ed efficiente. L’obiettivo è migliorare la velocità complessiva del compilatore, riducendo i tempi di compilazione e fornendo una diagnostica degli errori più accurata. Riducendo i tempi di attesa per il completamento delle compilazioni e semplificando l’individuazione e la risoluzione dei problemi, questa modalità mira a migliorare l’esperienza di Kotlin per gli sviluppatori Java.
I progressi non si limitano alla velocità di compilazione. La modalità K2 di IntelliJ IDEA, attualmente in fase Alpha, sta producendo risultati incoraggianti. Sul codice sorgente di IntelliJ IDEA Ultimate, offre una evidenziazione del codice circa 1,8 volte più veloce e un completamento automatico 1,5 volte più rapido, e la sua community è determinata a migliorarla ulteriormente. In futuro, si prevede che Kotlin sarà più stabile, offrendo un completamento e un’evidenziazione del codice più veloci.
Velocità di compilazione migliorata
Kotlin 2.0 offre significativi miglioramenti nelle prestazioni di compilazione, consentendo agli sviluppatori di lavorare in modo più produttivo e di iterare più rapidamente. I tempi di compilazione si riducono e il processo di sviluppo risulta più efficace grazie all’introduzione del nuovo compilatore K2 e ad altri miglioramenti in termini di efficienza, soprattutto per i progetti di grandi dimensioni.
Supporto per i plugin di compilazione
Grazie al supporto esteso per i plugin del compilatore, gli sviluppatori possono ora creare plugin personalizzati per ampliare le funzionalità del compilatore. Ciò consente una maggiore flessibilità e la possibilità di personalizzare il processo di compilazione per adattarlo ai requisiti specifici di ciascun progetto.
I seguenti plugin del compilatore Kotlin sono attualmente supportati dal compilatore K2:
- tutto aperto
- Fu atomico
- jvm-abi-gen
- js-plain-objects
- capitano
- Lombok
- senza argomenti
- Pacchiare
- SAM con ricevitore
- serializzazione
- Assertore di potere
Inoltre, il compilatore Kotlin K2 supporta:
- Il plugin del compilatore Jetpack Compose, versione 2.0.0, è stato spostato nel repository Kotlin.
- Il plugin Kotlin Symbol Processing (KSP) è disponibile dalla versione KSP2.
Kotlin/JVM
Questa versione introduce le seguenti modifiche:
Generazione di funzioni lambda tramite invokedynamic
Nell’ultima versione è stato introdotto un nuovo metodo predefinito per la generazione dinamica delle funzioni lambda. Rispetto alla generazione convenzionale di classi anonime, questa modifica riduce le dimensioni dei file binari delle applicazioni.
Fin dalla sua prima versione, Kotlin ha generato le lambda come classi anonime. Tuttavia, a partire da Kotlin 1.5.0, l’opzione del compilatore -Xlambdas=indy ha reso possibile la generazione dinamica. Il metodo predefinito per la creazione di lambda è ora invokedynamic. Utilizzando questa tecnica, le applicazioni possono sfruttare i miglioramenti di velocità attuali e futuri della JVM, producendo al contempo binari più leggeri e allineando Kotlin alle ottimizzazioni della JVM.
Allo stato attuale, presenta tre svantaggi rispetto alla compilazione lambda standard:
- Quando compilata in InvokeDynamic, una lambda non può essere serializzata.
- Le funzioni lambda create da invokedynamic non sono supportate dall’API sperimentale reflect().
- Quando si chiama .toString() su una lambda di questo tipo, viene prodotta una rappresentazione in stringa meno leggibile:
fun main() { println({}) // With Kotlin 1.9.24 and reflection, returns // () -> kotlin.Unit // With Kotlin 2.0.0, returns // FileKt$$Lambda$13/0x00007f88a0004608@506e1b77 }
Se desideri continuare a creare funzioni lambda nel modo tradizionale, hai due opzioni:
- Utilizza @JvmSerializableLambda per annotare le lambda.
- Per la tecnica storica di generazione di tutte le lambda in un modulo, utilizzare l’opzione del compilatore -Xlambdas=class.
La libreria kotlinx-metadata-jvm è ora stabile
La libreria kotlinx-metadata-jvm è ora stabile nell’ultimo aggiornamento. Ora è possibile individuare la libreria come kotlin-metadata-jvm poiché utilizza il suo pacchetto e le sue coordinate.
La libreria kotlinx-metadata-jvm era stata precedentemente pubblicata con una versione e un metodo di pubblicazione diversi. Con le stesse garanzie di compatibilità con le versioni precedenti, ora produrrà e rilascerà le modifiche di kotlin-metadata-jvm come parte del ciclo di rilascio di Kotlin.
La libreria kotlin-metadata-jvm fornisce un’API per leggere e modificare i metadati dei file binari prodotti dal compilatore Kotlin/JVM.
Kotlin/Native
La versione 2.0 di Kotlin/Native introduce miglioramenti significativi, come strumenti più avanzati, una migliore interoperabilità con C e Objective-C e prestazioni ottimizzate. Questi sviluppi facilitano la creazione di applicazioni native ad alte prestazioni su diverse piattaforme, inclusi sistemi embedded e iOS.
Questa versione introduce le seguenti modifiche:
- Monitoraggio delle prestazioni del garbage collector tramite indicatori :
Un notevole miglioramento è reso possibile dai segnali di controllo, che consentono agli sviluppatori di monitorare in modo più efficiente le prestazioni della raccolta dei rifiuti (GC). Questa funzionalità contribuisce a ottimizzare l’utilizzo delle risorse offrendo preziose informazioni sulla gestione della memoria.
- Risoluzione dei conflitti con metodi Objective-C
In questa versione, Kotlin risolve i conflitti con i metodi di Objective-C, facilitando l’interoperabilità tra codebase Kotlin e Objective-C. Ora che la funzionalità può essere facilmente integrata in applicazioni con componenti Objective-C preesistenti, gli sviluppatori possono migliorare la compatibilità multipiattaforma e snellire il processo di sviluppo.
- Modificato il livello di log per gli argomenti del compilatore in Kotlin/Native
La versione X di Kotlin/Native introduce miglioramenti alla registrazione dei parametri del compilatore, offrendo agli utenti maggiore controllo e trasparenza sul processo di compilazione. Gli sviluppatori possono personalizzare la propria esperienza di debug per soddisfare i requisiti del progetto modificando i livelli di log, migliorando così la produttività e le capacità di risoluzione dei problemi.
- Sono state aggiunte esplicitamente le dipendenze della libreria standard e della piattaforma a Kotlin/Native
Ora che Kotlin/Native è stato aggiornato, le dipendenze standard della libreria e della piattaforma sono incluse esplicitamente, garantendo una copertura completa di tutte le parti necessarie per lo sviluppo di applicazioni native. Questo aggiornamento semplifica la gestione delle dipendenze e l’integrazione di Kotlin/Native in diversi contesti di progetto.
- Errore nelle attività nella cache di configurazione di Gradle
La versione X di Kotlin risolve i problemi relativi alle attività che si presentavano durante la memorizzazione nella cache della configurazione di Gradle, garantendo maggiore stabilità e affidabilità del processo di compilazione. Quando si lavora con progetti Kotlin in Gradle, gli sviluppatori possono beneficiare di compilazioni più produttive e di una maggiore efficienza grazie alla risoluzione di questi problemi.
Kotlin/Wasm
La versione 2.0.0 di Kotlin/Wasm (WebAssembly) introduce diverse nuove funzionalità e miglioramenti volti a ottimizzare l’interoperabilità e la velocità di JavaScript. Con questa release, gli sviluppatori che desiderano creare applicazioni web ad alte prestazioni troveranno in Kotlin/Wasm uno strumento ancora più potente. Ecco le novità:
Build di produzione ottimizzate per impostazione predefinita tramite Binaryen
Binaryen viene ora utilizzato di default da Kotlin/Wasm per ottimizzare le build di produzione. Senza richiedere impostazioni aggiuntive, Binaryen ottimizza il codice WebAssembly (Wasm) per rendere le applicazioni più veloci ed efficienti.
Supporto per l’esportazione denominata
Nell’ultima versione è ora possibile utilizzare le esportazioni con nome nei moduli Wasm. Ciò semplifica la gestione e l’integrazione dei moduli Kotlin/Wasm nei progetti JavaScript, consentendo esportazioni più chiare e leggibili.
Supporto per tipi primitivi senza segno nelle funzioni con @JsExport
Il supporto per i tipi primitivi senza segno nelle funzioni contrassegnate con @JsExport è esteso da Kotlin/Wasm. Una migliore compatibilità con JavaScript è garantita da questa funzionalità, che consente ai programmatori di utilizzare tipi primitivi senza segno Gestire con facilità numeri interi e altri tipi primitivi in progetti multilingue.
Generazione di file di dichiarazione TypeScript in Kotlin/Wasm
La possibilità di creare file di dichiarazione TypeScript (.d.ts) direttamente dal codice Kotlin/Wasm è una delle caratteristiche più notevoli di questo strumento. Offrendo funzionalità di sicurezza dei tipi e completamento automatico negli editor compatibili con TypeScript, si ottiene una migliore integrazione con i progetti TypeScript.
Tutte le funzioni di primo livello designate con @JsExport vengono raccolte dal compilatore Kotlin/Wasm, che crea automaticamente le definizioni TypeScript nel file adts.
Aggiungi la funzione generateTypeScriptDefinitions() al blocco wasmJs {} del tuo file build.gradle (kts) per generare le definizioni TypeScript:
kotlin { wasmJs { binaries.executable() browser { } generateTypeScriptDefinitions() } }
Supporto per la memorizzazione nella cache delle eccezioni JavaScript
Ora che Kotlin/Wasm è in grado di intercettare le eccezioni JavaScript, i tuoi moduli possono gestire gli errori in modo più efficace. Questo miglioramento garantisce che gli errori provenienti dal codice JavaScript possano essere gestiti e corretti correttamente dalle tue applicazioni.
Nuova proposta di gestione delle eccezioni Supporto nell’ambito dell’opzione
Il supporto per una nuova proposta di gestione delle eccezioni è incluso nell’ultima versione ed è abilitabile tramite un’opzione dedicata. Questa funzionalità migliora la gestione delle eccezioni da parte di Wasm, offrendo un metodo più standardizzato ed efficace per affrontare gli errori.
La funzione withWasm() è stata suddivisa in varianti JS e WASI.
Grazie alla separazione della funzione withWasm() nelle versioni JS e WASI, ora è possibile avere maggiore flessibilità e controllo sui moduli. Questa suddivisione consente agli sviluppatori di selezionare il contesto più adatto alle proprie applicazioni, indipendentemente dal fatto che vengano eseguite in un contesto WebAssembly System Interface (WASI) o in un ambiente JavaScript.
Kotlin/JS
Questa versione supporta più funzionalità dello standard ES2015 e aggiunge la compilazione JavaScript moderna a Kotlin, tra le altre modifiche.
Nuovo obiettivo di compilazione
Nella versione 2.0 di Kotlin/JS, aggiungiamo ES2015 come nuovo target di compilazione. Si tratta di un nuovo metodo che consente di abilitare simultaneamente tutte le funzionalità di ES2015 supportate da Kotlin.
Ecco come configurarlo nel file build.gradle (.kts):
kotlin { js { compilerOptions { target.set("es2015") } } }
Sospendi le funzioni come generatori ES2015
Con questa versione, i generatori ES2015 utilizzati per compilare le funzioni di sospensione ora dispongono di un supporto sperimentale.
Se si utilizzano i generatori al posto delle macchine a stati, la dimensione finale del pacchetto del progetto dovrebbe aumentare. Ad esempio, utilizzando i generatori di ES2015, il team di JetBrains è riuscito a ridurre la dimensione del pacchetto del suo progetto Space del 20%.
- Passaggio di argomenti alla funzione principale
- Compilazione file per file per progetti Kotlin/JS
- Migliore interoperabilità delle collezioni
Supporto per createInstance()
A partire da Kotlin 2.0.0, è possibile utilizzare la funzione createInstance() del target Kotlin/JS. In precedenza, il suo utilizzo era limitato alla JVM.
Per ottenere il riferimento di runtime a una classe Kotlin, utilizzare la funzione dell’interfaccia KClass che genera una nuova istanza della classe specificata.
Supporto per il gestore di pacchetti npm
In precedenza, l’unico modo per scaricare e installare le dipendenze npm era tramite il plugin Multiplatform Gradle utilizzando Yarn come gestore di pacchetti. A partire da Kotlin 2.0.0, è possibile passare a npm come gestore di pacchetti. Utilizzando npm, si elimina un ulteriore strumento dalla lista di configurazione.
Il gestore di pacchetti predefinito è ancora Yarn per garantire la compatibilità con le versioni precedenti. Nel file gradle.properties, imposta la seguente proprietà per utilizzare npm come gestore di pacchetti:
kotlin.js.yarn = false
Modifiche alle attività di compilazione
Le stesse directory erano state precedentemente utilizzate sia dal job di compilazione webpack che da quello di distributeResources. Inoltre, il job di distribuzione specificava la directory dist come directory di output. Ciò ha comportato la sovrapposizione degli output e un avviso di compilazione.
A partire da Kotlin 2.0.0, applichiamo le seguenti modifiche:
- La cartella di destinazione per l’operazione webpack è stata modificata.
- Il processo distributeResources viene eliminato.
- La cartella dist è la destinazione dell’attività di distribuzione, che ora ha il tipo Copia.
Interruzione del supporto per i vecchi artefatti JAR di Kotlin/JS.
A partire dalla versione 2.0, la distribuzione non include più le risorse Kotlin/JS legacy con estensione .jar. Gli artefatti legacy sono superflui per il compilatore IR che utilizza il formato klib e venivano utilizzati nel vecchio compilatore Kotlin/JS, ormai obsoleto.
Miglioramenti di Gradle
Gradle dalla versione 6.8.3 alla 8.5 è completamente compatibile con Kotlin 2.0. Fino alla versione più recente, è ancora possibile utilizzare le versioni di Gradle, ma in tal caso, tieni presente che alcune nuove funzionalità di Gradle potrebbero non funzionare o che potresti ricevere avvisi di deprecazione.
Questa versione include i seguenti miglioramenti:
- Nuovo DSL di Gradle per le opzioni del compilatore nei progetti multipiattaforma
- Nuovo plugin Gradle per il compilatore Compose
- Aggiornamento delle versioni minime supportate
- Nuovo attributo per distinguere le librerie pubblicate su JVM e su Android.
- Gestione migliorata delle dipendenze Gradle per CInteropProcess in Kotlin/Native
- Modifiche di visibilità in Gradle
- Nuova directory per i dati Kotlin nei progetti Gradle
- Compilatore Kotlin/Native scaricato quando necessario
- Abbandonare i vecchi metodi di definizione delle opzioni del compilatore
- Incrementata la versione minima supportata da AGP
- Nuova proprietà Gradle per provare l’ultima versione del linguaggio
- Nuovo formato di output JSON per i report di compilazione
- Le configurazioni di Kapt ereditano i processori di annotazione dalle super configurazioni
- Il plugin Kotlin Gradle non utilizza più le convenzioni Gradle obsolete.
Biblioteca standard
Con questa versione, la libreria standard diventa ancora più stabile e un maggior numero di funzionalità diventano universali su tutte le piattaforme:
- Sostituzione stabile della funzione generica del valore della classe enum
- Interfaccia stabile con chiusura automatica.
- Proprietà protetta comune AbstractMutableList.modCount
- Funzione protetta comune AbstractMutableList.removeRange
- Stringa comune.toCharArray(destinazione)
Conclusione
Il rilascio di Kotlin 2.0 testimonia il continuo sviluppo del linguaggio e l’impegno costante nel fornire agli sviluppatori strumenti e funzionalità all’avanguardia. Con miglioramenti per JVM, Native, JavaScript e WebAssembly, tra le altre piattaforme, Kotlin 2.0.0 crea nuove opportunità per la creatività e lo sviluppo multipiattaforma. Con l’aggiunta della modalità di compilazione K2 e i miglioramenti al supporto middleware, alla velocità di compilazione e all’integrazione con Gradle, questa release segna una svolta importante per il progetto. Adottando l’ultima versione, i programmatori intraprendono un percorso infinitamente gratificante, alimentato dall’ingegno, dalla produttività e dalle infinite possibilità intrinseche dello sviluppo software contemporaneo.
Infine, vorremmo sottolineare che questa piattaforma offre una miriade di miglioramenti e funzionalità che la rendono uno strumento indispensabile per lo sviluppo software moderno. In qualità di agenzia leader nell’assunzione di sviluppatori di app Kotlin in India , siamo entusiasti delle possibilità che questo aggiornamento apre, soprattutto per lo sviluppo di app Kotlin e per le agenzie di sviluppo di app Android . Per gli sviluppatori Java che desiderano effettuare una transizione senza intoppi, questa versione offre strumenti e integrazioni robusti, rendendola una scelta eccellente per il vostro prossimo progetto. Che stiate creando soluzioni aziendali complesse o app mobile innovative, adottare questa versione più recente vi consentirà di realizzare applicazioni di alta qualità, efficienti e scalabili.


