CLR, per gli amici Common Language Runtime

Chiunque (più o meno) ha avuto a che fare con .NET ha avuto a che fare con queste tre lettere, ma cos’è esattamente il Common Language Runtime?

CLR at a glance

Il CLR è l’ambiente in cui viene eseguito il nostro codice, cioè macchina virtuale e librerie standard di .NET. In più di un’occasione ho sentito definire .NET come “il Java di Microsoft”; per quanto approssimativa, questa definizione calza. C’è solo una differenza: la JVM fa lavorare solo Java, mentre in .NET possiamo far lavorare contemporaneamente qualunque linguaggio del CLR. Possiamo avere un pezzo di codice scrivvo in C#, uno in VB.NET e uno in F# che usano gli stessi servizi, che vengono tradotti nello stesso codice gestito e che quindi parlano tra di loro senza problemi.

Com’è possibile?

Malgrado a volte siamo portati a pensarlo, la magia non esiste, quindi un qualche strumento che rende possibile tutto ciò deve pur esistere. Questo, anzi, questi strumenti sono essenzialmente due: metadati e un un sistema di tipi comune. I metadati  vengono generati dai compilatori della famiglia .NET per descrivere, tipi, membri e riferimenti presenti nel codice. Questi metadati viaggiano con i file eseguibili che vengono generati dal compilatore. Dimostrazione pratica: aprite Visual Studio su un progetto qualunque, e provate a guardare il codice di una classe del CLR, ad esempio string:

Parola magica: from metadata. I metadati servono anche a questo: vedere che cosa ci fornisce una classe, in termini di metodi e proprietà pubbliche. I metadati vengono usati nell’ambiente di esecuzione per individuare e caricare classi, disporre istanze in memoria, risolvere chiamate di metodo, generare codice nativo, garantire sicurezza e impostare limiti di contesto per la fase di esecuzione. Usando i metadati, quindi, il CLR sa che la classe X offre il metodo Y, non importa in quale linguaggio siano stati scritti X e Y.

Per approfondire

Su MSDN potete trovare tutti gli approfondimenti che volete su .NET e il CLR. Per vostra comodità vi elenco qui una serie di link che potete consultare:

CLR: https://msdn.microsoft.com/it-it/library/8bs2ecf4(v=vs.110).aspx

Common Type System: https://msdn.microsoft.com/it-it/library/zcx1eb1e(v=vs.110).aspx

 

Pierpaolo Paris

Sono uno dei tanti che sono entrati nel girone infernale di Ingegneria Informatica, e che poi ne è anche uscito. Attualmente lavoro come sviluppatore presso una società di consulenza. Ogni tanto mi diletto con la fotografia.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *