.NETのコンパイルは、2つのフェーズ実行時間VSコンパイル時間(.NET)
1を有しています。 ILコードへのコンパイル。
2。 JITのネイティブコードへのコンパイル。
これらの段階はどちらもコンパイル時に分類できますか? JITコンパイルがネイティブコードに実行時に行われますか?
フェーズ2でエラーが発生した場合は、ランタイムエラーですか?
MSILへのC#のコンパイルとネイティブコードにMSILをコンパイルするには2をしている - 私の理解あたりとして
.NETのコンパイルは、2つのフェーズ実行時間VSコンパイル時間(.NET)
1を有しています。 ILコードへのコンパイル。
2。 JITのネイティブコードへのコンパイル。
これらの段階はどちらもコンパイル時に分類できますか? JITコンパイルがネイティブコードに実行時に行われますか?
フェーズ2でエラーが発生した場合は、ランタイムエラーですか?
MSILへのC#のコンパイルとネイティブコードにMSILをコンパイルするには2をしている - 私の理解あたりとして
(フェーズ2すなわち後に発生したエラーは、ネイティブコードが実際に実行された場合、実行時エラーでなければなりません)コンパイルプロセスの段階。両方の段階で発生するエラーはコンパイル時エラーです。
ただし、第2段階(JIT)でコンパイルエラーが発生する可能性は低いです。 C#コードがMSILに正しくコンパイルされていれば、問題なくネイティブコードに確実にJITされます。
IMO JITingで最も重要なことは、ネイティブプラットフォームの最適化です。
ランタイムエラーは、JITedネイティブコードの実行中に発生するエラーです。
JITコンパイルが失敗するケースは、System.Reflection.Emitメンバーで動的アセンブリを構築する場合です。
私はそれをランタイムエラーと考えています。コンパイル時エラーは、C#コンパイラがILを発行するコードでエラーを検出したときに発生するエラーです。
あなたのMSILが_verifiable_ILである必要があります。検証不可能なILは、通常のアセンブラのようにバッファオーバーフローやその他のバグを引き起こすことがあります(例外をスローするCLRによって検出されることがよくあります)。 – thecoop
http://download.microsoft.com/download/2/4/d/24dfac0e-fec7-4252-91b9-fb2310603f14/CLRUnderTheHood.BradA.ppt PPTによると、JITコンパイラとネイティブコードの両方がこれは、ILにコンパイルするときだけコンパイル時に を意味するはずです。 JITフェーズは実行時間にする必要があります。 関連する他のプレゼンテーションは、下記のリンクからアクセスできます http://download.microsoft.com/download/e/2/1/e216b4ce-1417-41af-863d-ec15f2d31b59/DEV490.ppt – rjv