Microsoft ha presentato il rilascio della piattaforma open source .NET 9, sviluppata grazie all'unificazione dei prodotti .NET Framework, .NET Core e Mono. Con .NET 9 è possibile creare applicazioni multipiattaforma per browser, sistemi cloud, desktop, dispositivi IoT e piattaforme mobili, utilizzando librerie uniche e un processo di build comune, indipendentemente dal tipo di applicazione. Le build .NET SDK 9, .NET Runtime 9 e ASP.NET Core Runtime 9 sono disponibili per Linux, macOS e Windows. .NET Desktop Runtime 9 è fornito solo per Windows. I risultati relativi al progetto sono distribuiti sotto licenza MIT.
.NET include un runtime con il compilatore JIT RyuJIT, specifiche API, librerie WPF, Windows Forms, WinUI e Entity Framework, un'interfaccia a riga di comando dotnet, oltre a strumenti per lo sviluppo di microservizi, librerie, applicazioni server, grafiche e console. A parte, è fornito lo stack per lo sviluppo di applicazioni web ASP.NET Core 9.0, la libreria ORM Entity Framework Core 9.0 (i driver sono inclusi, compresi quelli per SQLite e PostgreSQL), la libreria WPF 9 (Windows Presentation Foundation), il framework Windows Forms 9 per lo sviluppo di GUI, la piattaforma Aspire 9 per la creazione di applicazioni Cloud Native, il framework MAUI 9 per lo sviluppo di interfacce utente multipiattaforma, oltre alle versioni dei linguaggi C# 13 e F# 9. Il supporto per .NET 9.0 e C# 13 è incluso nell'editor di codice gratuito Visual Studio Code.
Caratteristiche della nuova versione:
- Sono state apportate oltre mille modifiche per ottimizzare le performance e migliorare la qualità del codice generato. È stato modernizzato il garbage collector, che ora implementa e utilizza per default un meccanismo di adattamento dinamico alle dimensioni dell'applicazione (il garbage collector è legato non alla disponibilità di risorse di sistema, ma a quanta memoria richiede l'applicazione). Questa nuova modalità permette di aumentare l'efficienza operativa su sistemi con un numero elevato di core CPU, quando l'applicazione utilizza relativamente poca memoria o quando le esigenze di memoria variano notevolmente durante l'esecuzione.
Nel JIT compiler sono state aggiunte nuove ottimizzazioni basate su profiling (PGO), migliorate la gestione dei cicli, l'inlining e il controllo dei limiti. Nel runtime .NET è stato ampliato l'uso delle istruzioni vettoriali e aggiunta la supporto per le estensioni Arm64 SVE e Intel AVX10. Il codice per la gestione delle eccezioni è stato accelerato del 50%. Per il codice con operazioni di cast di tipo, come «(IFoo)myFoo» e «myFoo is IFoo», è stato registrato un aumento delle prestazioni fino al 70%. Le prestazioni di alcuni metodi nel linguaggio di query integrato LINQ, come Take e DefaultIfEmpty, sono aumentate fino a 10 volte quando si lavora con array e collezioni vuote.
È stata significativamente aumentata la prestazione e l'efficienza del metodo System.Text.Json. Nel metodo JsonProperty.WriteTo è stata implementata la possibilità di scrivere direttamente stringhe UTF8, evitando allocazioni di memoria non necessarie. Sono state ottimizzate le operazioni di ridimensionamento di JsonObject. Nei test TechEmpower, che valutano l'efficacia del codice per la gestione delle richieste JSON, rispetto a .NET 8 si osserva un incremento delle prestazioni del 15% e una riduzione del consumo di memoria del 93%.
- In Runtime è stato proposto un nuovo modello di attributi per attivare e limitare le funzionalità nelle librerie.
- Nel linguaggio C# 13 sono state ampliate le possibilità di utilizzo del modificatore «params», consentendo di specificare collezioni oltre agli array. Durante l'inizializzazione degli array, è consentito utilizzare l'operatore «^» per fare riferimento agli indici dalla fine dell'array (ad esempio, «buffer = { [^1] = 0, [^2] = 1,….}» scriverà 0 nell'ultimo elemento e 1 nel penultimo). Negli iteratori e nei metodi async è consentito l'uso delle espressioni ref e unsafe. È stata aggiunta una nuova sequenza di escape «\e». È consentita la definizione di interfacce per i tipi «ref struct» e l'uso di tali tipi come argomenti in funzioni generiche. È stato proposto un nuovo tipo Lock per impostare blocchi nelle applicazioni multithreading. Lock myLock = new(); void Concat<T>(params List<T> items) { lock (myLock) Console.WriteLine(string.Join(«\e[1mItem: \e[0m», items)); }
- Nel linguaggio F# 9 è stata introdotta la supporto per i tipi che possono assumere valori null. Negli union sono state implementate proprietà generate automaticamente «.Is*» (ad esempio, person.contact.IsEmail), che possono essere utilizzate per verificare se un valore appartiene a un insieme. È stata aggiunta la supporto per espressioni calcolate vuote («let xs = seq { }»). Nelle direttive che iniziano con il simbolo «#», è consentito specificare valori non stringa (ad esempio, si può scrivere #nowarn 0070 invece di #nowarn «0070»). Nei moduli List, Array e Seq sono state aggiunte funzioni per la scelta casuale o il mescolamento degli elementi. È consentito applicare operazioni di collezione a liste (list) e insiemi (set).
- Sono state ampliate le funzionalità del stack .NET Aspire, che fornisce un insieme di componenti per la creazione di applicazioni eseguibili in ambienti cloud. Sono state aggiunte nuove funzionalità per la gestione delle risorse e per il ciclo di vita delle applicazioni. Sono stati potenziati gli strumenti per la raccolta della telemetria.
- È stato proposto un nuovo set di astrazioni C# per lo sviluppo di applicazioni AI, l'uso di modelli linguistici di grandi dimensioni, l'accesso a database vettoriali e l'interazione con i servizi AI. È stato introdotto un nuovo tipo "Tensor" e una collezione di metodi per calcoli e manipolazione di dati multidimensionali. Gli aggiornamenti per l'AI sono distribuiti sotto forma di pacchetti System.Numerics.Tensors, Microsoft.Extensions.AI e Microsoft.Extensions.VectorData. È stato aggiornato il framework ML.NET, progettato per integrare modelli di apprendimento automatico nelle applicazioni. È stata aggiunta la libreria Microsoft.ML.Tokenizers per la codifica e decodifica del testo in token.
- Nel stack per lo sviluppo di applicazioni web ASP.NET Core è stata ampliata la supporto per la compilazione anticipata (ahead-of-time), migliorate le capacità di monitoraggio e tracciamento, ridotto il tempo di avvio e ridotto il consumo di memoria, e ottimizzato il lavoro con i file statici. È stata aggiunta una nuova API per l'autenticazione e autorizzazione. In Blazor, la piattaforma per la creazione di applicazioni web in C#, sono stati implementati nuovi modelli per applicazioni ibride e web.
- Sono state ampliate le capacità del framework MAUI per lo sviluppo di interfacce utente multipiattaforma. Sono stati ottimizzati le prestazioni e rafforzata l'integrazione con le applicazioni desktop e mobili. Sono stati aggiunti nuovi elementi dell'interfaccia come TitleBar e HybridWebView.
- In WPF (Windows Presentation Foundation) è stata ampliata la supporto per i temi e aggiunto il supporto per i colori di accento.
Fonte: opennet.ru
