logo

.NET Common Language Runtime (CLR)

.NET CLR è un ambiente runtime che gestisce ed esegue il codice scritto in qualsiasi linguaggio di programmazione .NET. CLR è il componente della macchina virtuale del framework .NET. Il compilatore di quel linguaggio compila il codice sorgente delle applicazioni sviluppate utilizzando linguaggi conformi a .NET nel linguaggio intermedio di CLR chiamato MSIL, ovvero il codice del linguaggio intermedio di Microsoft. Questo codice è indipendente dalla piattaforma. È paragonabile al codice byte in Java. I metadati vengono generati anche durante la compilazione e il codice MSIL e archiviati in un file noto come file Manifest. Questi metadati riguardano generalmente i membri e i tipi richiesti da CLR per eseguire il codice MSIL. Un componente del compilatore just-in-time di CLR converte il codice MSIL nel codice nativo della macchina. Questo codice dipende dalla piattaforma. CLR gestisce memoria, thread, eccezioni, esecuzione del codice, sicurezza del codice, verifica e compilazione.

parola chiave statica in Java

La figura seguente mostra la conversione del codice sorgente in codice nativo.

Net Common Language Runtime

La figura sopra converte il codice in codice nativo, che la CPU può eseguire.

I componenti principali di CLR sono:

  • Sistema di tipi comuni
  • Speciazione linguistica comune
  • Netturbino
  • Compilatore Just in Time
  • Metadati e assiemi
Net Common Language Runtime

1. Sistema di tipi comuni:

CTS fornisce linee guida per dichiarare, utilizzare e gestire i tipi di dati in fase di esecuzione. Offre comunicazione multilingue. Ad esempio, VB.NET ha un tipo di dati integer e C# ha un tipo di dati int per la gestione dei numeri interi. Dopo la compilazione, Int32 viene utilizzato da entrambi i tipi di dati. Pertanto, CTS fornisce i tipi di dati utilizzando il codice gestito. Un sistema di tipi comune aiuta a scrivere codice indipendente dal linguaggio.

Fornisce due categorie di Tipi.

    Tipo di valore:Un tipo di valore archivia i dati nella memoria allocata nello stack o inline in una struttura. Questa categoria di Tipo contiene la directory dei dati. Se il valore di una variabile viene copiato in un'altra, entrambe le variabili memorizzano i dati in modo indipendente. Può essere di tipi incorporati, definiti dall'utente o tipi di enumerazione. I tipi incorporati sono tipi di dati primitivi come numerico, booleano, carattere e data. Gli utenti nel codice sorgente creano tipi definiti dall'utente. Un'enumerazione fa riferimento a un insieme di valori enumerati rappresentati da etichette ma archiviati come tipo numerico.
    Net Common Language Runtime Tipo di riferimento:Un tipo Reference memorizza un riferimento al valore di un indirizzo di memoria e viene allocato nell'heap. La memoria heap viene utilizzata per l'allocazione dinamica della memoria. Il tipo di riferimento non contiene direttamente i dati effettivi ma contiene l'indirizzo dei dati. Ogni volta che viene creato un oggetto di tipo riferimento, copia l'indirizzo e non i dati effettivi. Pertanto due variabili faranno riferimento agli stessi dati. Se i dati di un oggetto Tipo di riferimento vengono modificati, lo stesso si riflette sull'altro oggetto. I tipi di riferimento possono essere tipi autodescrittivi, tipi di puntatore o tipi di interferenza. I tipi autodescrittivi possono essere string, array e tipi di classe che memorizzano metadati su se stessi.

2. Specifica linguistica comune (CLS):

Common Language Specifiche (CLS) contiene una serie di regole che devono essere seguite da tutti i linguaggi supportati da NET. Le regole comuni semplificano l'implementazione dell'integrazione linguistica e aiutano nell'ereditarietà e nel debug tra lingue diverse. Ogni linguaggio supportato da NET Framework ha le proprie regole di sintassi. Ma CLS garantisce l'interoperabilità tra le applicazioni sviluppate utilizzando i linguaggi NET.

3. Raccolta dei rifiuti:

Garbage Collector è un componente di CLR che funziona come gestore automatico della memoria. Aiuta a gestire la memoria allocando automaticamente la memoria in base ai requisiti. Alloca memoria heap agli oggetti. Quando gli oggetti non sono in uso, recupera la memoria ad essi assegnata per un uso futuro. Garantisce inoltre la sicurezza degli oggetti impedendo a un oggetto di utilizzare il contenuto di un altro oggetto.

4. Compilatore Just in Time (JIT):

Il compilatore JIT è un componente importante di CLR. Converte il codice MSIL in codice nativo (ovvero codice specifico della macchina). Il programma .NET viene compilato in modo esplicito o implicito. Lo sviluppatore o il programmatore chiama un particolare compilatore per compilare il programma nella compilazione esplicita. Nella compilazione implicita il programma viene compilato due volte. Il codice sorgente viene compilato in Microsoft Intermediate Language (MSIL) durante il primo processo di compilazione. Il codice MSIL viene convertito in codice nativo nel secondo processo di compilazione. Questo processo è chiamato compilazione JIT. Esistono tre tipi di compilatori JIT: Pre, Econo e Normal. Il compilatore Pre JIT compila l'intero codice MSIL in codice nativo prima dell'esecuzione. Econo JIT Compiler compila solo le parti del codice MSIL richieste durante l'esecuzione e rimuove quelle parti che non sono più necessarie. Il normale compilatore JIT compila anche solo quelle parti del codice MSIL richieste durante l'esecuzione, ma le inserisce nella cache per un uso futuro. Non richiede ricompilazioni di parti già utilizzate poiché sono state inserite nella memoria cache.

5. Metadati:

Un metadato è un'informazione binaria sul programma, archiviata in un file PE (Portable Executable) CLR insieme al codice MSIL o nella memoria. Durante l'esecuzione di MSIL, vengono caricati in memoria anche i metadati per la corretta interpretazione delle classi e relativi. Informazioni utilizzate nel codice. Pertanto, i metadati aiutano a implementare il codice in modo indipendente dal linguaggio o a raggiungere l’interoperabilità linguistica.

6. Assemblee:

Un assembly è un'unità fondamentale del raggruppamento di codice fisico. È costituito dal manifesto dell'assembly, dai metadati, dal codice MSIL e da un set di risorse come file di immagine. È anche considerata un'unità di distribuzione di base, controllo della versione, riutilizzo, autorizzazioni di sicurezza, ecc.

Funzioni CLR .NET

Di seguito le funzioni del CLR.

  • Converte il programma in codice nativo.
  • Gestisce le eccezioni
  • Fornisce la sicurezza del tipo
  • Gestione della memoria
  • Fornisce sicurezza
  • Prestazione migliorata
  • Indipendente dalla lingua
  • Piattaforma indipendente
  • Raccolta dei rifiuti
  • Fornisce funzionalità del linguaggio come ereditarietà, interfacce e sovraccarico per programmi orientati agli oggetti.

Il codice eseguito con CLR è denominato codice gestito, mentre il codice esterno a CLR è denominato codice non gestito. Il CLR fornisce anche un livello di interoperabilità, che consente l'interoperabilità sia del codice gestito che di quello non gestito.

1. Codice gestito:

Qualsiasi linguaggio scritto nel framework .NET è codice gestito. Il codice gestito utilizza CLR, che si prende cura delle tue applicazioni gestendo la memoria, gestendo la sicurezza, consentendo il debug tra più linguaggi, ecc. Il processo del codice gestito è mostrato nella figura:

Net Common Language Runtime

2. Codice non gestito:

Il codice sviluppato all'esterno del framework .NET è noto come codice non gestito. Le applicazioni che non vengono eseguite sotto il controllo del CLR vengono definite non gestite. Alcuni linguaggi come C++ possono essere utilizzati per scrivere tali applicazioni, come le funzioni di accesso di basso livello del sistema operativo. La compatibilità in background con VB, ASP e COM sono esempi di codice non gestito. Questo codice viene eseguito con l'aiuto delle classi wrapper. Il processo di codice non gestito è mostrato di seguito:

Net Common Language Runtime

Versioni .NET CLR

Il CLR si aggiorna di volta in volta per fornire prestazioni migliori.

Versione .NET Versione CLR
1.0 1.0
1.1 1.1
2.0 2.0
3.0 2.0
3.5 2.0
4 4
4.5 4
4.6 4
4.6 4

Struttura CLR .NET

Di seguito è riportata la struttura dei componenti di Common Language Runtime.

Net Common Language Runtime

Supporto della libreria di classi base

È una libreria di classi che supporta le classi per l'applicazione .NET.

Supporto del filo

Gestisce l'esecuzione parallela dell'applicazione multi-thread.

Maresciallo COM

Fornisce la comunicazione tra gli oggetti COM e l'applicazione.

Motore di sicurezza

Applica restrizioni di sicurezza.

Motore di debug

Ti consente di eseguire il debug di diversi tipi di applicazioni.

Digita Controllo

Controlla i tipi utilizzati nell'applicazione e verifica che corrispondano agli standard forniti dal CLR.

Gestore del codice

Gestisce il codice in fase di esecuzione.

Netturbino

Rilascia la memoria inutilizzata e la alloca a una nuova applicazione.

Gestore delle eccezioni

Gestisce l'eccezione in fase di esecuzione per evitare errori dell'applicazione.

ClassLoader

Viene utilizzato per caricare tutte le classi in fase di esecuzione.