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.
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érence: CIL est la partition 3 du standard ECMA-335 qui définit l'infrastructure .NET.
Outils
- ILdasm est un outil de Microsoft pour désassembler le code CIL afin de le rendre lisible par l'homme.
- JSIL est un outil pour convertir le bytecode CIL en JavaScript et ainsi faire tourner les applications .NET dans un navigateur. Quelques jeux ont déjà été portés.
- Bridge.net est un autre outil similaire mais moins complet que JSIL.
Voir aussi LLVM, une alternative plus portable encore, qui peut aussi produire du JavaScript à partir de différents langages, et la différence expliquée entre bitcode et bytecode.