
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 .
Инструменты
- ILdasm - инструмент Microsoft для разбора CIL-кода, чтобы сделать его читаемым человеком.
- JSIL - инструмент для преобразования bytecode CIL в JavaScript и тем самым раскрутки приложений .NET в браузере. Уже портировано несколько игр.
- Bridge.net - еще один подобный, но менее всеобъемлющий инструмент, чем JSIL.
См. также LLVM, еще более переносимую альтернативу, которая также может производить JavaScript из разных языков, и объяснимую разницу между биткодом и байтекодом.