DOT NET PLATFORM

.NET Platform

ARCHITETTURA DI .NET

Riportiamo lo schema a blocchi dell’architettura .NET, valida prima del rilascio a novembre di DOT NET 5. Al di sotto di tutto c’è il .NET Standard che è un insieme di API (Application Program Interface) che definisce quali servizi e quali regole devono essere eseguite da ciascuna implementazione concreta della piattaforma software che vuole essere conforme a queste specifiche.

.NET STANDARD

La prima implementazione del .NET standard, che viene installato con il .NET Core SDK, è stata il .NET Framework presente sul mercato sin dal 2002 e che serve a realizzare applicazioni desktop, web e mobile però solo ed esclusivamente per l’ambiante windows. Attualmente la versione del .NET framework è ferma alla 4.8 e con l’avvento di .NET 5 non vi saranno ulteriori sviluppi. Come si vede dall’immagine sopra riportata i programmi scritti con il .NET framework vengono eseguiti dal CLR (Common Language Runtime) ossia la macchina virtuale sulla quale vengono messi in esecuzione i programmi. Al di sopra del CLR troviamo un’ampia libreria di classi FCL (Framework Class Library).

.NET CORE E’ UN’APPLICAZIONE MULTIPIATTAFORMA

.NET Core è un’implementazione open source e multipiattaforma sempre del .NET Standard. La cosa più importante da dire è che Microsoft con .NET Core ha eliminato ogni dipendenza da Windows quindi è multipiattaforma, un programma scritto con .NET Core può girare indifferentemente sia su Windows, Linux, Mac. Per imparare a programmare in C# ci baseremo su questo framework in particolare facendo riferimento alla versione 3.1 oramai confluita in .NET 5 come vedremo più avanti.

ARCHITETTURA DI .NET CORE

NET Core ha un proprio CLR e una propria libreria di classi molto ampia tra cui sono definiti anche i tipi primitivi come Boolean, Integer, Stringe cc. Potrai seguire il corso indifferentemente sia su Windows che su Linux e macOS. Xamarin Mono l’ultimo framework acquisito da Microsoft che si basa su .NET standard serve sostanzialmente allo sviluppo di applicazioni mobile. Ha un proprio Runtime come .NET Core e la propria libreria di classi. Sul progetto Mono si basa anche Unity che serve allo sviluppo di giochi in 2D e 3D.

ASP NET CORE

IL CORE CLR

Coreclr

Il codice sorgente prodotto dal linguaggio C# viene sottoposto a compilazione. Il compilatore Roslyn prende il codice sorgente scritto con un editor come Visual Studio Code e dopo gli opportuni controlli non produce il codice nativo ma il CIL (Common Intermediate Language o semplicemente IL Intermediate Language).

INTERMEDIATE LANGUAGE

Il CIL è indipendente dal linguaggio che abbiamo utilizzato per produrlo, è in questa fase che si ha l’interoperabilità fra i vari linguaggi della piattaforma .NET. A questo punto il CIL può essere eseguito dal CoreCLR. Il CoreCLR utilizza al proprio interno un compilatore JIT (Just in Time) eseguito a Runtime che prende in mano il CIL e lo compila definitivamente, cioè per un particolare microprocessore e sistema operativo (Windows, Linux, macOS).

Build di un programma
Il compilatore JIT

ASSEMBLY .NET

Da un punto di vista generale un programma C# che viene compilato è chiamato Assembly. L’assembly è un file che può avere estensione .exe o .dll. La figura seguente illustra che possiamo avere due tipi di assembly, i Process Assembly e i Library Assembly.

Assembly

IL FUTURO DI DOT NET 5

L’obbiettivo di Microsoft è quello di unificare le piattaforme per tutti gli sviluppatori .NET, sia ad esempio chi usa ASP NET Core sia chi sviluppa sul framework tradizionale per creare applicazioni Desktop o per chi sta usando Xamarin per applicazioni IOS o Android. Questo ambizioso obbiettivo non si è riusciti a concretizzarlo in .NET 5 a causa della pandemia. Questa unificazione probabilmente si verificherà a novembre prossimo con il rilascio di .NET 6. Ma vediamo quello che è stato fatto in .NET 5. Le applicazioni Desktop di Windows e le applicazioni Web ASP.NET Core possono usare il nuovo framework .NET 5 e quindi tutta la sua Base Class Library. Tali applicazioni andranno in esecuzione grazie al CoreClr Runtime uno strato posto tra .NET 5 e il Sistema Operativo che lo ospita Windows, Linux, macOS.

BLAZOR

Un altro tipo di applicazione è Blazor che non gira su un particolare sistema operativo, ma la sua piattaforma ospitante è il Browser.  Grazie ad un progetto Blazor WebAssembly si può eseguire un progetto scritto in C# direttamente nel Browser, per creare interfacce web dinamiche anziché usare JavaScript. Anche questo tipo di progetto può usare .NET 5 ma non il CoreCLR Runtime ma al suo posto c’è il Mono Runtime.

Architettura .NET 5

Si è deciso di usare Mono Runtime perché chi utilizza il Browser come piattaforma ospitante non può avere una dipendenza dal CoreCLR Runtime che è molto grande in termini di MByte costringendolo a scaricarsi un pacchetto molto corposo, i tempi di caricamento di pagina ne soffrirebbero. Un discorso simile si può fare per le applicazioni Mobile, in questo caso non si può usare .NET 5 come target Framework ma MonoAndroid che a sua volta userà Mono Runtime.

TimeLine

.NET 5 è una versione Current quindi non godrà del supporto esteso delle versioni LTS, solo le versioni pari superiori a .NET 5 avranno il Long Term Support. Il processo di unificazione è iniziato l’anno scorso con il rilascio di .NET Core 3.1 in cui le applicazioni windows potevano usare questo target Framework su .NET 5 è stato aggiunto un altro tassello, cioè lo sviluppo di applicazioni Windows ma su architettura ARM 64. L’architettura ARM viene utilizzata nei dispositivi più piccoli smartphone, tablet e questo perché è un tipo di processore che offre buone prestazioni con un buon risparmio di energia. ARM 64 sarà il futuro dei notebook ma anche di computer desktop e andrà a soppiantare la tradizionale architettura Intel 386. Sono stati creati una serie di processori, l’ultimo è SQ2 che viene installato sui portatili Surface Pro X. Parallelamente anche Apple ha creato il suo processore M1 però .NET 5 non supporta macOS su ARM 64, questo significa che le applicazioni scritte in .NET 5 su questo processore risulteranno più lente perché gireranno in modalità emulazione. Anche Xamarin si pensa che con .NET 6 sia unificato al framework .NET 5

Novità .NET 5

ENTITY FRAMEWORK CORE 5

In questo rilascio, Entity Framework Core si migliora ulteriormente perché Microsoft ha risolto alcuni problemi di performance riscontrati con la precedente versione 3. Ora il prodotto è ancora più maturo e colma anche delle precedenti lacune: ad esempio ci permette di mappare relazioni molti-a-molti. Altre migliorie ci danno maggiore visibilità sulle query SQL prodotte da Entity Framework Core:

  • Le query LINQ (cioè gli oggetti di tipo IQueryable) ora dispongono di un metodo ToQueryString()che ci permette di ispezionare la query SQL prima ancora che sia inviata al database;

ASP.NET CORE SU .NET 5

I miglioramenti hanno riguardato in particolar modo il prodotto più giovane della famiglia di ASP.NET Core, ovvero Blazor WebAssembly, in modo che potesse rivaleggiare con altri framework frontend, sia come funzionalità che come prestazioni. Per il resto, ASP.NET Core si è dimostrato un prodotto già maturo e perciò non sono state introdotte nuove funzionalità eclatanti. Ci sono comunque numerosi nice-to-have degni di menzione, come:

  • Il model binding supporta i record di C# 9, così che possiamo modellare degli input model immutabili;
  • Miglioramenti prestazionali per Kestrel e gRPC, che ora sono in grado di ricevere più richieste nell’unità di tempo;
  • Live reload integrato quando si lancia l’applicazione con dotnet watch;
  • Immagini docker più snelle quando si distribuisce l’applicazione su container.

.NET 5 LINK AI POST PRECEDENTI

.NET 5 APPROFONDIMENTO