CIL de Microsoft, diagramme par .fr

CIL - Common Intermediate Language

CIL (Common Intermediate Langue) - байтекод, это портативный язык платформы .NET, на котором компилируются исходники, написанные на языках высокого уровня. Его работа основана на стеке и выполняется виртуальной машиной.

Он также называется IL или MSIL (MicroSoft Intermediate Language), который был его первоначальным названием до стандартизации CLI (Common Language Infrastructure), частью которого он является и с которым его не следует путать .

Высокоуровневый исходный код (C #, Basic или другой язык) компилируется в CIL и хранится в сборке (или сборке).
Сборка повторяет формат PE (Portable Executable), который также является форматом DLL и .exe, и включает файл манифеста, содержащий medadata сборки, который является интерфейсом кода с другими компонентами программного обеспечения, которое его использует.

Этот код компилируется в байтекод для интерпретации JIT, или в двоичный для прямого выполнения процессором.

Язык CIL может выполнять арифметические, логические операции и имеет управляющие структуры (петли, if и т.д.), выполняет вызовы функций и методов, управление стеком, загрузку и резервное копирование данных, преобразование типов (число в строку...), поддерживает исключения и конкуренцию.

Минимальная программа Hello на языке сборки 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  
}  

Пример байт-кода 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                     

Ссылка: CIL - это раздел 3 стандарта ECMA-335, определяющий инфраструктуру .NET .

Инструменты

См. также LLVM, еще более переносимую альтернативу, которая также может производить JavaScript из разных языков, и объяснимую разницу между биткодом и байтекодом.