2011-02-10 17 views
6

compilación .NET tiene dos fasestiempo Run tiempo VS Compilar (NET)

  • 1. Compilación a código IL.

  • 2. Compilación JIT para código nativo.

¿Pueden estas dos etapas clasificarse como tiempo de compilación? ¿O la compilación de JIT para el código nativo entra en funcionamiento?

En términos de error, si ocurre un error en la fase dos, ¿es un error de tiempo de ejecución? (Cualquier error que se produce después de la fase 2, es decir, cuando el código nativo se ejecuta realmente debe ser un error de tiempo de ejecución)

Respuesta

4

Según mi entendimiento -

Compilación de C# para MSIL y la compilación de MSIL a código nativo son dos etapas del proceso de compilación. Los errores que se producen en ambas etapas son errores de tiempo de compilación.

Sin embargo, es poco probable que haya errores de compilación en la segunda etapa (JIT). Si su código de C# se compila correctamente en MSIL, sin duda será JIT al código nativo sin ningún problema.

IMO lo más importante que sucede durante JITing es la optimización de la plataforma nativa.

Los errores de tiempo de ejecución son los que ocurren durante la ejecución de su código nativo JITed.

+1

Eso debería ser si su MSIL es _verificable_ IL; IL no verificable puede causar desbordamientos de búfer y otros errores al igual que el ensamblador normal (aunque a menudo son recogidos por el CLR que arroja una excepción). – thecoop

+0

http://download.microsoft.com/download/2/4/d/24dfac0e-fec7-4252-91b9-fb2310603f14/CLRUnderTheHood.BradA.ppt Según el PPT el compilador JIT y el código nativo tanto viene en la sección de ejecución. Esto debería significar tiempo de compilación como compilación solo para IL. La fase JIT debe ser tiempo de ejecución. Otra presentación relacionada se puede acceder desde abajo enlace http://download.microsoft.com/download/e/2/1/e216b4ce-1417-41af-863d-ec15f2d31b59/DEV490.ppt – rjv

0

Un caso en el que la compilación JIT podría fallar es cuando se crean ensamblajes dinámicos con miembros System.Reflection.Emit.

Lo consideraría un error de tiempo de ejecución, un error de compilación es un error que se produce cuando el compilador de C# detecta un error en el código que emite la IL.

Cuestiones relacionadas