Codice multi runtime con .NET Standard 2.0

di Cristian Civera, in .NET Standard,

Sono passati ormai 17 anni dall'uscita del .NET Framework e dei linguaggi ad essi collegati, e da allora molto è stato fatto da parte di Microsoft per migliorarlo e renderlo completo. Ormai giunti alla versione 4.7.1, nel momento della stesura di questo articolo, .NET è stato preso come punto di riferimento per Microsoft e per tutto il suo ecosistema. Lo possiamo usare per sviluppare applicazioni web, Windows e negli anni è stato adottato e adattato anche su altre piattaforme o tecnologie. Pensiamo a Silverlight, Windows Phone e per ultimo con la Universal Windows Platform.

Purtroppo questo ha portato a delle separazioni del .NET Framework stesso, per poter essere utilizzato anche su altri ambienti, creando una problematica nello sviluppo di librerie e componenti che possano essere utilizzate dappertutto. Le specifiche .NET Standard sono la soluzione a questo problema e guardano al futuro di .NET per renderlo sempre più un punto di riferimento. In questo articolo vedremo quindi in dettaglio qual è il problema che .NET Standard risolve e come possiamo sfruttarlo per creare e riutilizzare librerie proprie o di terze parti.

L'attuale mondo .NET

Quando nacque il .NET Framework, le intenzioni erano di far crescere un sistema che fosse multipiattaforma, ma nella realtà la sua crescita si è concentrata solo nell'ambito Windows, potendo da una parte trarre il massimo dal sistema operativo, ma dall'altra impedendo al framework stesso di poter essere adottato da altri sistemi operativi. Il progetto Mono fu un tentativo open source che permise di adottare questa tecnologia anche in ambito Linux o Mac, mantenendo la stessa BCL. Scarsamente adottato, venne poi convertito in uno strumento per lo sviluppo di applicazioni native mobile che oggi conosciamo con il nome di Xamarin.

Dal punto di vista del runtime, cioè del motore in grado eseguire il JIT del codice e di gestire la memoria allocata, si è dovuto replicare parte di quanto è stato fatto per poter funzionare anche su altre piattaforme. Ancora più difficile è il caso di Xamarin, dove il runtime è una virtual machine, se l'applicativo è prodotto ed eseguito su Android, oppure è una conversione in codice nativo con una simulazione della virtual machine se l'applicativo è eseguito su iOS.

Nel 2015, quando Microsoft decise l'introduzione di .NET Core si ritrovò a fare un ulteriore spin off e creare un altro runtime, poiché il codice era troppo accoppiato al sistema operativo, così come anche parte delle librerie ad esso dedicato. Il .NET Core però non ha solo l'intento di rendere .NET multipiattaforma e di farlo diventare una tecnologia indipendente, ma vuole porre delle basi che permettano in futuro di non avere più questo problema. Si sta andando in questa direzione e lo dimostra il fatto che .NET Core è anche il runtime con le quali le Universal Windows App vengono eseguite. Ricapitolando, la situazione dei giorni nostri è quella visibile nella figura seguente.

A seconda della tecnologia di front end che sviluppiamo, ci troviamo ad essere forzati ad adottare uno dei tre runtime messi a disposizione. Così facendo però perdiamo la possibilità di scrivere codice che possa funzionare su tutti i runtime, o meglio lo è dal punto di vista dei contenuti della BCL, ma non c'è una compatibilità binaria della dll che produciamo. Per BCL (Base Class Library) intendiamo le classi base che siamo abituati ad usare: tipi primitivi, accesso ai file, richieste di rete, manipolazione XML e LINQ, per citare i più importanti.

Questo problema in realtà è presente già da molto tempo, ancora quando vennero introdotti Silverlight e Windows Phone. La risposta allora, e tutt'oggi ancora presente, furono le Portable Class Library (PCL), cioè dei profili che definiscono membri e classi in comune ai runtime e alle versioni specifiche di un certo framework. Scegliendo una compatibilità con .NET Framework 4.5, Windows Phone e Xamarin, per esempio, il compilatore permette di utilizzare classi appartenenti a tutte le tecnologie e di produrre una dll portabile, appunto. Questa tecnica però si è dimostrata insufficiente a causa di alcune differenze tra la BCL e la scarsa adattabilità dei profili a nuovi runtime.

Queste problematiche, che affronteremo in dettaglio più avanti, hanno portato all'introduzione del .NET Standard, un risultato che è dovuto grazie al miglioramento e all'introduzione di nuove funzionalità agli strumenti che ruotano introno al mondo .NET; primo tra questi è sicuramente Visual Studio.

5 pagine in totale: 1 2 3 4 5
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc