Microsoft ha presentato un'importante release della piattaforma open source .NET 7, realizzata attraverso l'unificazione dei prodotti .NET Framework, .NET Core e Mono. Con .NET 7 è possibile sviluppare applicazioni multipiattaforma per browser, sistemi cloud, desktop, dispositivi IoT e piattaforme mobili, utilizzando librerie comuni e un processo di build unitario, indipendentemente dal tipo di applicazione. I pacchetti .NET SDK 7, .NET Runtime 7 e ASP.NET Core Runtime 7 sono stati creati per Linux, macOS e Windows. .NET Desktop Runtime 6 è fornito solo per Windows. I materiali associati al progetto sono distribuiti sotto licenza MIT. Il supporto per la versione .NET 7 sarà garantito per 18 mesi fino al 14 maggio 2024.
.NET 7 include il runtime CoreCLR con il compilatore JIT RyuJIT, le librerie standard, le librerie CoreFX, WPF, Windows Forms, WinUI, Entity Framework, l'interfaccia della riga di comando dotnet, così come gli strumenti per lo sviluppo di microservizi, librerie, applicazioni server, grafiche e console. È pubblicato separatamente lo stack per lo sviluppo di applicazioni web ASP.NET Core 7.0, il livello ORM Entity Framework Core 7.0 (i driver sono disponibili, inclusi quelli per SQLite e PostgreSQL), la libreria WPF 7 (Windows Presentation Foundation), il framework Windows Forms 7 per lo sviluppo di GUI, la piattaforma Orleans 7 per la creazione di applicazioni Cloud Native, il framework MAUI 7 per lo sviluppo di interfacce utente multipiattaforma, e i rilasci dei linguaggi C# 11 e F# 7. Il supporto per .NET 7.0 e C# 11 è incluso nell'editor di codice gratuito Visual Studio Code.
Caratteristiche della nuova versione:
- È stata realizzata un’unificazione della libreria di classi di base (BCL, Base Class Library) per l’uso in diversi tipi di applicazioni, inclusi programmi per sistemi desktop, applicazioni web, piattaforme cloud, applicazioni mobili, giochi, software embedded e sistemi di machine learning. Per lo sviluppo di vari tipi di applicazioni, è possibile utilizzare un comune SDK, Runtime e set di librerie.
- È stata introdotta la possibilità di collegare l'applicazione a un'API corrispondente alla release .NET 7, attraverso la definizione della piattaforma target 'net7.0', ad esempio, 'net7.0'. Per il collegamento a API specifiche per certe piattaforme, è possibile dettagliare il tipo di piattaforma nella definizione dell'obiettivo, specificando ad esempio 'net7.0-android'.
- È stato notevolmente migliorato il supporto per l'architettura ARM64 e proseguono gli sforzi per raggiungere la parità nelle prestazioni delle applicazioni .NET eseguite su architetture x86 e ARM64. Nella runtime è stata aumentata l'efficienza dell'utilizzo della cache di terzo livello sui sistemi ARM64. Sono state attivate istruzioni LSE per delimitare l'accesso alla memoria da thread paralleli, il che ha portato a una riduzione delle latenze del 45%. Sono stati aggiunti gestori nella libreria che utilizzano tipi vettoriali Vector64, Vector128 e Vector256, e le funzioni EncodeToUtf8 e DecodeFromUtf8 sono state riscritte utilizzando istruzioni vettoriali, garantendo un incremento delle loro prestazioni fino al 60% (per le funzioni NarrowUtf16ToAscii e GetIndexOfFirstNonAsciiChar, l'aumento delle prestazioni raggiunge il 35%). In generale, la velocità di esecuzione dei test sulla piattaforma ARM64 è aumentata dal 10% al 60%.

- Migliorato il supporto per la piattaforma Linux, includendo i pacchetti .NET 6 nei repository ufficiali di Ubuntu 22.04, e fornito un'immagine docker ottimizzata, compatta e pronta all'uso per un rapido deployment di contenitori per applicazioni basate su .NET.
- Aggiunto il supporto per l'architettura IBM Power a 64 bit (ppc64le).
- Introdotto il toolkit .NET Upgrade Assistant per semplificare la migrazione di vecchi progetti verso le versioni .NET 6 o .NET 7. Nella nuova versione è stata ampliata la supporto per la migrazione di applicazioni da ASP.NET a ASP.NET Core, aggiunti analizzatori e correttori di codice per WinForms, WPF, e librerie di classi, realizzato il supporto per l'analisi di file eseguibili, e aggiunto il supporto per la piattaforma UWP (Universal Windows Platform).
- Espanso le capacità di creazione di applicazioni per sistemi cloud-native e piattaforme PaaS (Platform as a Service). Offerta la possibilità di creare applicazioni confezionate in contenitori isolati utilizzando il comando "dotnet publish".
- Ampliate le risorse per il monitoraggio dello stato delle applicazioni e la raccolta delle metriche sulle loro prestazioni. Aggiunti nuovi eventi e metodi per analizzare l'attività e le performance delle applicazioni.
- Nel linguaggio C# 11 è stata aggiunta la supporto per le stringhe letterali non elaborate, che possono includere caratteri speciali senza necessità di escaparli (queste stringhe sono evidenziate da tre virgolette). Sono stati proposti interfacce generiche per le funzioni matematiche e la possibilità di definire elementi statici in interfacce virtuali, consentendo l'applicazione di metodi di programmazione generica per svolgere operazioni matematiche senza informazioni accurate sui tipi di valori.
- Le funzionalità della libreria standard sono state ampliate. È stato aggiunto l'API System.Formats.Tar per lavorare con archivi nel formato Tar. Nelle funzioni di gestione del tempo (TimeStamp, DateTime, ecc.) è stata aggiunta la supporto per microsecondi e nanosecondi. In System.Text.Json è stata implementata la possibilità di controllare la serializzazione e deserializzazione dei tipi .NET.
- Nell'interfaccia della riga di comando «dotnet new» è stata aggiunta la supporto per il completamento automatico dei modelli di progetto standard tramite la pressione del tasto Tab.
- Nel .NET SDK è stata implementata la possibilità di limitare l'applicazione dei modelli di progetto forniti, ad esempio è possibile definire in quali sistemi operativi è consentito l'uso di un modello.
- In NuGet è stata aggiunta la modalità di gestione centralizzata dei pacchetti, che consente di gestire le dipendenze per più progetti contemporaneamente.
- Le prestazioni del compilatore JIT sono state migliorate. È stata aggiunta la supporto per il meccanismo OSR (On Stack Replacement) per modificare il codice dei metodi già in esecuzione, consentendo l'ottimizzazione dei metodi che richiedono molto tempo, senza dover attendere il termine dell'attuale chiamata (nel test TechEmpower si riscontra un incremento delle prestazioni del 10-30% nella gestione delle prime richieste).
- L'efficienza dell'ottimizzazione basata sui risultati del profilo del codice (PGO — ottimizzazione guidata dal profilo) è stata migliorata, permettendo di tenere conto delle specificità determinate durante l'esecuzione del programma.
- È stata aggiunta la supporto per la compilazione in file eseguibili autonomi (Native AOT), nei quali l'intero progetto è inizialmente compilato in codice macchina per la piattaforma destinataria, senza utilizzare codice intermediario e senza ricorrere al JIT.
Fonte: opennet.ru

