El lenguaje intermedio de Microsoft (MSIL), también conocido como lenguaje intermedio común (CIL), es un conjunto de instrucciones que son independientes de la plataforma y son generadas por el compilador específico del lenguaje a partir del código fuente. MSIL es independiente de la plataforma y, en consecuencia, se puede ejecutar en cualquiera de los entornos compatibles con Common Language Infrastructure, como Windows. .NETO tiempo de ejecución.
El compilador JIT convierte el MSIL en un código de máquina específico para un entorno informático particular. Esto se hace antes de que se pueda ejecutar MSIL. Además, el MSIL se convierte al código de máquina según los requisitos, es decir, el compilador JIT compila el MSIL según sea necesario en lugar de hacerlo en su totalidad.
Proceso de ejecución en Common Language Runtime (CLR): El proceso de ejecución que incluye la creación del MSIL y la conversión del MSIL en código de máquina por parte del compilador JIT se detalla a continuación:

eliminar el archivo en java
- El código fuente se convierte al MSIL mediante un compilador específico del lenguaje en el tiempo de compilación del CLR. Además, junto con el MSIL, en la compilación también se producen metadatos. Los metadatos contienen información como la definición y firma de los tipos en el código, información de tiempo de ejecución, etc.
- Un ensamblado de infraestructura de lenguaje común (CLI) se crea ensamblando MSIL. Este ensamblado es básicamente una biblioteca de código compilado que se utiliza para seguridad, implementación, control de versiones, etc. y es de dos tipos, es decir, ensamblado de proceso (EXE) y ensamblado de biblioteca (DLL).
- Luego, el compilador JIT convierte el lenguaje intermedio de Microsoft (MSIL) en el código de máquina específico del entorno informático en el que se ejecuta el compilador JIT. El MSIL se convierte al código de máquina según los requisitos, es decir, el compilador JIT compila el MSIL según sea necesario en lugar de hacerlo en su totalidad.
- El código de máquina obtenido mediante el compilador JIT es luego ejecutado por el procesador de la computadora.
Ejemplo: El MSIL lo genera el compilador específico del idioma a partir del código fuente que se proporciona a continuación. Para comprender MSIL en detalle, código fuente C# simple con la clase Demo que imprime techcodeview.com se da de la siguiente manera:
using> System;> > public> class> Demo {> >public> static> void> Main()> >{> >Console.WriteLine(>'techcodeview.com'>);> >}> }> |
>
>
El MSIL creado por el compilador de C# para el código proporcionado anteriormente se proporciona de la siguiente manera:
recorrido del árbol en orden
// =============== CLASS MEMBERS DECLARATION =================== .class public auto ansi beforefieldinit Demo extends [mscorlib]System.Object { .method public hidebysig static void Main() cil managed { // .maxstack 8 IL_0000: nop IL_0001: ldstr 'techcodeview.com' IL_0006: call void [mscorlib]System.Console::WriteLine(string) IL_000b: nop IL_000c: ret } // end of method Demo::Main .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { // .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret } // end of method Demo::.ctor } // end of class Demo // =============================================================> En el MSIL anterior, hay códigos de operación que tienen uno o dos bytes de longitud. Las declaraciones de clase base de las que se heredan todas las demás clases están contenidas en el mscorlib.dll . En el método Main(), la instrucción ldstr carga la cuerda techcodeview.com en la pila. Entonces la estática System.Console.Writeline Se llama a la función y la cadena se extrae de la pila. Finalmente, la instrucción ret señala el final de la llamada a la función.
Entonces el .ctor( ) implica un constructor predeterminado sin parámetros para la clase Demo. Este constructor lo crea automáticamente el compilador para la clase no estática Demo. La instrucción de llamada pasa el constructor del objeto base y la instrucción ret señala el final de la llamada a la función.