Common Intermediate Language (CIL, pronunciado "sil" o "kil") (anteriormente llamadoMicrosoft Intermediate Language o MSIL) es ellenguaje de programaciónlegible por humanos de más bajo nivel en elCommon Language Infrastructure y en el.NET Framework. Los lenguajes del .NET Framework compilan a CIL. CIL es unlenguaje ensambladororientado a objetos, y está basado enpilas. Es ejecutado por unamáquina virtual. Los lenguajes .NET principales sonC#,Visual Basic .NET,C++/CLI, yJ#.
CIL fue conocido originalmente como Microsoft Intermediate Language (MSIL) durante las versiones de prueba de los lenguajes .NET. Debido a esto, CIL es frecuentemente llamado MSIL.Es posible ejecutar este lenguaje en plataformasGNU/Linux gracias alProyecto Mono, que implementa una máquina virtual similar a la de .NET pero de software libre.
Durante la compilación de loslenguajes de programación .NET, elcódigo fuente es convertido a código CIL en lugar decódigo objeto específico del procesador o de la plataforma. CIL es unconjunto de instrucciones independientes de la plataforma y que puede ser ejecutado en cualquier CPU.
El código intermedio de CIL incluye un conjunto deinstrucciones para las siguientes grupos de tareas:
Lacompilación en tiempo de ejecución (JIT, just-in-time) involucra convertir el código intermedio en código inmediatamente ejecutable por la CPU. La conversión es realizada gradualmente durante la ejecución del programa. La compilación JIT proporciona optimización especifica para el ambiente, seguridad de tipos en tiempo de ejecución, y verificación de ensamblados. Para cumplir con esto, el compilador JIT examina losmetadatos del ensamblado en busca de accesos ilegales y maneja las violaciones apropiadamente.
El generador de imágenes nativas (NGEN) produce una imagen binaria nativa para el entorno actual. El bytecode es omitido completamente o convertido en instrucciones nativas de CPU antes de la ejecución. Esto elimina la sobrecarga del JIT a costo de la portabilidad; cuando una imagen generada por NGEN es ejecutada en un entorno no compatible, el .NET framework automáticamente utilizara el compilador JIT.
Se pretende que NGEN haga la ejecución de ensamblados más rápida al eliminar el proceso de compilación JIT en tiempo de ejecución, pero en algunos casos, esto tiene efectos adversos debido a la optimización hecha por el optimizador JIT. Por este hecho, se sugiere usar NGEN solo después de medir el rendimiento de la aplicación antes y después de usarlo.
Desde abril de 2014 Microsoft comenzó a desarrollar la tecnología en la nube necesaria para que todas las aplicaciones en su tienda de aplicaciones universal se compilaran mediante .NET Native a código nativo según cada dispositivo.[1] Esto mejorará enormemente el rendimiento de Aplicaciones Universales enWindows 10 tanto para teléfonos como para PCs, permitiendo que estas abran y reanuden un 60% más rápido y usen un 20% menos de memoria, permitiendo al sistema menores tiempos de respuesta.[2]
Esto mejorará el rendimiento enormemente, especialmente en dispositivos donde el consumo de memoria y procesador es crítico, como por ejemplo los dispositivos que actualmente ejecutanWindows Phone 8.1 y que actualizarán aWindows 10 Mobile a finales del año 2015.[3]
Losmetadatos son información acerca de las clases compiladas. Al igual que los tipos de biblioteca en elComponent Object Model, permite a las aplicaciones proporcionar y descubrir interfaces, clases, tipos, métodos y campos en el ensamblado. El proceso de lectura de metadatos es llamadoreflexión.