Lenguaje Intermedio Común

Common Intermediate Language ( CIL para abreviar ) es el "ensamblador de alto nivel" de la máquina virtual .NET . Un lenguaje intermedio desarrollado por Microsoft para .NET Framework . El compilador CIL JIT es parte de CLR ( c ommon  language r untime ), un entorno de ejecución común para programas escritos en lenguajes .NET . El lenguaje se llamaba anteriormente " Lenguaje intermedio de Microsoft (MSIL) ", pero se le cambió el nombre para crear el estándar "ECMA-335".

Todos los compiladores que soportan la plataforma .NET deben traducir el código de los lenguajes de alto nivel de la plataforma .NET a CIL. En particular, el código CIL es generado por todos los compiladores de Microsoft .NET incluidos en el entorno de desarrollo de Microsoft Visual Studio ( C# , Managed C++ , Visual Basic .NET , Visual J# .NET ).

CIL se parece al lenguaje ensamblador en sintaxis y mnemónicos . Se puede considerar como un ensamblador de máquinas virtuales .NET. Al mismo tiempo, el lenguaje CIL contiene algunas construcciones de alto nivel que lo elevan por encima del nivel de ensamblador para cualquier máquina real, y es más fácil escribir código directamente en CIL que en ensamblador para máquinas reales. Por lo tanto, CIL puede considerarse como una especie de "ensamblador de alto nivel".

El idioma CIL también se conoce a menudo simplemente como IL del inglés.  I nguaje intermedio  - literalmente "lenguaje intermedio" .

La sintaxis y los mnemotécnicos del lenguaje CIL están descritos por el estándar ECMA-335. La especificación CIL es una parte integral de una especificación más general: la especificación CLI ( Infraestructura de lenguaje común en inglés  ).

Código de ejemplo

El siguiente programa está escrito en CIL y genera la cadena " ¡Hola, mundo !".

.asamblea Hola {} .método public static void Main() cil gestionado { .punto de entrada .maxstack 1 ldstr "¡Hola, mundo!" llamada nula [mscorlib]System.Console::WriteLine(cadena) retirado }

El siguiente programa está escrito en C# .

static void Principal ( cadena [] argumentos ) { para ( int i = 2 ; i < 1000 ; i ++ ) { para ( int j = 2 ; j < i ; j ++ ) { if ( i % j == 0 ) ir al exterior ; } Consola . WriteLine ( i ); exterior :; } }

Considere el código CIL en el que se compila el código C# anterior.

primos .assembly{} .method private hidebysig static void Main(string[] args) cil gestionado { .punto de entrada .max pila 2 .locals init(int32 V_0, int32 V_1) ldc.i4.2 stloc.0 // v_0=2 br.s IL_001f IL_0004: ldc.i4.2 stloc.1 // v_1=2 br.s IL_0011 IL_0008: ldloc.0 // V_0 ldloc.1 // V_1 remanente // V_0 % V_1 brfalse.s IL_001b ldloc.1 //v_1 ldc.i4.1 agregar stloc.1 // v_1+=1 IL_0011: ldloc.1 //si v_1<=v_0 ldloc.0 blt.s IL_0008 ldloc.0 llamada nula [mscorlib]System.Console::WriteLine(int32) IL_001b: ldloc.0 //v_0 ldc.i4.1 agregar stloc.0 //v_0+=1 IL_001f: ldloc.0 ldc.i4 0x3e8 blt.s IL_0004 //si v_0<=1000 retirado }

El IDE de Microsoft Visual Studio viene con una utilidad ildasmque le permite ver el código CIL. ildasmpor defecto, está instalado en la carpeta " C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools " (la ruta exacta depende del bitness del sistema operativo y la versión de el .NET Framework ).