2009-01-17 24 views

Respuesta

1

Al compilar un programa .NET se compila en IL (Intermediate Language). IL es muy similar al lenguaje ensamblador. Esa IL luego se convierte en código nativo en tiempo de ejecución a través del compilador JIT (Just In Time).

Por lo tanto, para responder a su pregunta, sí y no. El compilador no emite código nativo, sino IL, que se convierte en código nativo cuando se ejecuta la aplicación.

26

Una aplicación .NET debe ejecutar el Common Language Runtime (CLR).

El CLR es la implementación de Microsoft del estándar CLI. (Y hay otras implementaciones de CLR al lado de Microsoft .NET Framework, es decir, Mono, Portable.NET).

El CLR ejecuta un tipo de bytecode conocido como Lenguaje Intermedio Común (CIL).

CIL

+0

siempre oí MSIL en contraposición a CIL. ¿Lo está llamando MSIL por fuera? –

+0

@PhoenixRedeemer: Originalmente se conocía como MSIL, durante las versiones beta de los lenguajes .NET, pero debido a la estandarización (Ecma-335 http://is.gd/gchW) ahora se conoce oficialmente como CIL ... – CMS

0

Bueno, al menos con mono Yo sé que se puede generar código nativo en lugar de ensamblados administrados. Creo que hay herramientas OpenSource para Windows que también pueden hacer esto.

0

Creo que debe tener cuidado al preguntar si está "compilado" y suponiendo que esto significa que el resultado emitido debe ser "código nativo". Esto no es lo que "compilado" significa:

"Generalmente decimos que un idioma es 'interpretado' cuando el traductor inicial es simple. Si el traductor es complicado, decimos que el idioma está" compilado ". La distinción puede ser confusa porque "simple" y "complicado" son términos subjetivos, y porque es posible que un compilador produzca código que luego es ejecutado por una máquina virtual complicada (intérprete) ... Estas dos características: análisis exhaustivo y no trivial transformación - son los sellos de la compilación ".

De "Programming Language Pragmatics" de Michael L. Scott. Por extraño que parezca, este es un libro de texto sobre la teoría del lenguaje de programación que acabo de leer esta tarde con la página abierta a esa cita.

Entonces, sí, C# y otros lenguajes .NET se ejecutan en CLR y se compilan.

7

Tipo de. El compilador .NET compila su código fuente en IL (un lenguaje intermedio) y lo empaqueta en un ensamblado (generalmente un archivo .DLL o .EXE) que usted implementa.En tiempo de ejecución, está alojado en un CLR (Common Language Runtime) que es responsable de ejecutar el código, aplicar las reglas de seguridad, etc. El escritorio principal CLR para Windows (hay otros como Mono y Silverlight) no interpreta el IL, sino más bien "JIT" s (compila justo a tiempo) el código IL en código nativo antes de ejecutar métodos (funciones).

Tenga en cuenta que en realidad hay algunas ventajas de rendimiento para just in-time compilation. Por ejemplo, CLR puede optimizar el código nativo que genera en función de las características de rendimiento de la máquina en la que se ejecuta, como tipo de CPU, tamaño de caché de CPU, número de CPU, tamaño de RAM, etc. Los compiladores tradicionales no pueden hacer esto ya que No sé en qué máquina se ejecutará finalmente el código que generan.

Además, los conjuntos pueden ser "pre-JITted" utilizando una herramienta llamada ngen. En este proceso, el código nativo se compila desde el IL antes de que el ensamblado se ejecute y se almacene en caché en el disco. De esta forma, no se incurre en gastos generales de JIT en el tiempo de ejecución.

+0

no muchos la gente sabe sobre ngen – chakrit

0

C++ es el lenguaje .Net que no tiene que compilarse en IL, pero no puede tener CUALQUIER referencia .NET o código de .Net si toma esta opción.

Otro aspecto a tener en cuenta es lo que c dragon señaló: ngen.exe, que puede tener algunas mejoras notables para muchas aplicaciones basadas en .Net windows/console.

0

en el momento de la ejecución, el compilador genera un código IL que es el código de lenguaje intermedio entonces el código se convierte en código nativo por el compilador JIT

Cuestiones relacionadas