CIL - Common Intermediate Language

CIL (Langage Intermédiaire Commun) est un bytecode, c'est le langage portable de la plateforme .NET dans lequel sont compilés les codes sources écrits dans les langages de haut niveau. Son fonctionnement est basé sur une pile et il est exécuté par une machine virtuelle.

CIL de Microsoft, diagramme par Scriptol.fr

On l'appelle aussi IL ou MSIL (MicroSoft Intermediate Language) qui était son nom initial avant la standardisation de la CLI (Common Language Infrastructure) dont il fait partie et avec laquelle on ne doit pas le confondre.

Le code source de haut niveau (C#, Basic ou autre langage) est compilé en CIL et stocké dans une assembly (ou un assemblage).
L'assembly reprend le format de fichier PE (Portable Executable) qui est aussi celui des .dll et des .exe, et comprend un fichier manifeste contenant les medadata de l'assemblage, qui est l'interface du code avec les autres composants des logiciels qui l'utilisent.

Ce code est compilé en bytecode pour être interprété par une JIT, ou en binaire pour être directement exécuté par le processeur.

Le langage CIL peut effectuer des opérations arithmétiques, logiques et a des structures de contrôle (boucles, if, etc), fait des appels de fonctions et méthodes, la gestion de pile, le chargement et sauvegarde de données, une conversion de types (nombre en chaîne...), supporte les exceptions et la concurrence.

Programme minimal Hello en langage d'assemblage CIL

.assembly Hello {}  
.method public static void Main() cil managed  
{       
  .entrypoint       
  .maxstack 1       
  ldstr "Salut le Monde!"       
  call void [mscorlib]System.Console::WriteLine(string)       
  ret  
}  

Exemple de bytecode CIL

assemblage           bytecode     rôle
ldarga argNum     FE 0A            récupère l'adresse donnée en argument
brtrue                    2D                branchement si résultat vaut vrai
break                     01                sortie de boucle                     

Références

Langages de programmation AspectJ - Basic - C - CIL - C++ - C++11 - C# - Dart - Eiffel - Go - Java - JavaScript - JavaFX Script - Pascal - PHP - Python - QML - Rexx - Ruby - Scala - Scriptol - Tcl - HTML - XML - XAML - XUL - SQL