.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.
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
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.
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:
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:
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.
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.