CIL - Common Intermediate Language

.::Home::.

.::Introduzione::.

1.Panoramica

4.DataBase

.::Presentazioni PPT::.

.::Link::.

.::DownLoad::.

 

L'implementazione nel .NET Framework del Common Intermediate Language (CIL per l'ECMA) è chiamata Microsoft Intermediate Language (MSIL). Questi termini saranno usati nel testo scambievolmente insieme ad "IL".

Il CIL rappresenta senza alcun dubbio uno dei componenti più interessanti del Common Language Runtime.

Tutti i compilatori che aderiscono alla struttura del CLR devono generare un rappresentazione intermedia del codice, indipendente dalla CPU, chiamata Common Intermediate Language (CIL). Il runtime utilizza questo linguaggio intermedio per generare codice nativo oppure viene eseguito al volo mediante la compilazione Just In Time (JIT), spiegata in seguito.

Il CLI si pone ad un livello molto più alto della maggior parte dei linguaggi macchina, avendo istruzioni per il caricamento, la memorizzazione e l'inizializzazione dei dati, per richiamare metodi da oggetti e molte istruzioni di tipo convenzionale per le operazioni aritmetiche e logiche, il controllo di flusso e l'accesso diretto alla memoria. IL CLI possiede inoltre istruzioni per elevare e intercettare le eccezioni per la gestione degli errori, simili a quelle Java di tipo "try/catch".

Questo formato intermedio presenta contemporaneamente affinità e grandi differenze rispetto al tradizionale linguaggio Assembly, similmente al quale può operare sui dati con istruzioni di tipo "push" e "pop" e spostarli in registri; ma diversamente dallo stesso non fa riferimento a nessuna particolare piattaforma hardware.

Uno dei principali vantaggi di questa soluzione è che permette al CLR di verificare durante la compilazione che il codice gestito sia completamente "Type Safe", ovvero conforme alle specifiche di programmazione e ai tipi di dati previsti dal runtime. Durante questa verifica il CLR controlla ad esempio l'uso corretto dei puntatori o si assicura che non siano presenti conversioni tra i tipi non consentite.

Proprio come Java, prima che il codice gestito sia eseguito, l'IL è convertito al volo in codice specifico per la CPU da un compilatore JIT, oppure compilato in codice nativo durante l'installazione. La piattaforma runtime fornisce uno o più compilatori a seconda del numero di piattaforme che deve supportare, nonostante l'attuale limitazione ad ambienti Microsoft questo garantisce una buona indipendenza dall'hardware potendo funzionare ad esempio con Windows CE su piattaforma non Intel x86 o sull'imminente architettura Win64.

Quando un compilatore conforme al Common Language Specification (CLS) genera Intermediate Language produce anche metadati che descrivono i tipi specifici appartenenti al Common Language Types (CLT) utilizzati nel codice, comprendente la definizione di ogni tipo, le signature per ogni membro del tipo, i membri ai quali il codice fa riferimento e gli altri dati che il runtime usa durante l'esecuzione.

Il MSIL e i metadati sono contentui in un file Portable Executable (PE), un'estensione del formato Microsoft Portable Esecutable e simile al Common Object File Format utilizzato nel mondo Unix per gli eseguibili. All'utente i PE appaiono come familiari file .DLL e .EXE.

Il formato dei file permette di ospitare sia il codice IL che il codice nativo, i metadati e un "pattern signature" che permette al sistema operativo di riconoscere le "immagini" (nel senso di unica porzione contigua di codice) del Common Language Runtime.

La presenza dei metadati nei file eseguibili permette ai componenti di essere autodescrittivi, eliminando di fatto la necessità di librerie dei tipi aggiuntive o dei Interface Definition Language (IDL) usate in DCOM e CORBA. Il runtime localizza ed estrae i metadati del file quando è necessario durante l'esecuzione del codice.

 

.::^top^::.

(2002) A cura di Carlo Becchi