2011-02-10 13 views
6

compilazione .NET ha due fasivolta Durata VS Compile (NET)

  • 1. Compilazione al codice IL.

  • 2. Compilazione JIT su codice nativo.

Può entrambi questi stadi possono essere classificati come tempo di compilazione? Oppure la compilazione JIT su codice nativo è in esecuzione?

In termini di errore, se si verifica un errore nella fase due, si tratta di un errore di runtime? (Qualsiasi errore che si verifica dopo l'cioè fase 2, quando il codice nativo è in realtà eseguita dovrebbe essere un errore di run-time)

risposta

4

Come per la mia comprensione -

Compilazione C# per MSIL e la compilazione di MSIL in codice nativo sono due fasi del processo di compilazione. Gli errori che si verificano in entrambi gli stadi sono errori in fase di compilazione.

Tuttavia, è improbabile che ci saranno errori di compilazione nella seconda fase (JIT). Se il tuo codice C# viene compilato correttamente con MSIL, sarà sicuramente JITed per il codice nativo senza problemi.

IMO la cosa più importante che accade durante JITing è l'ottimizzazione per la piattaforma nativa.

Gli errori di run-time sono quelli che si verificano durante l'esecuzione del codice nativo JITed.

+1

Questo dovrebbe essere se l'MSIL è _verifiable_ IL; l'IL non verificabile può causare buffer overflow e altri bug come il normale assembler (sebbene questi vengano spesso rilevati dal CLR che genera un'eccezione). – thecoop

+0

http://download.microsoft.com/download/2/4/d/24dfac0e-fec7-4252-91b9-fb2310603f14/CLRUnderTheHood.BradA.ppt Come per il PPT, il compilatore JIT e il codice nativo vengono entrambi sotto la sezione di esecuzione. Questo dovrebbe significare compilazione come compilazione solo in IL. Fase JIT dovrebbe essere tempo di esecuzione. Un'altra presentazione correlata si può accedere dal basso legame http://download.microsoft.com/download/e/2/1/e216b4ce-1417-41af-863d-ec15f2d31b59/DEV490.ppt – rjv

0

Un caso in cui la compilazione JIT potrebbe fallire è quando si costruiscono assiemi dinamici con i membri System.Reflection.Emit.

Lo considererei un errore di runtime, un errore di compilazione è un errore generato quando il compilatore C# rileva un errore nel codice che emette l'IL.