名称 说明
非托管代码 完全按照自己的想法管理内存,必要时能方便地创建线程;例如C/C++
托管代码 可以快速生成UI控制COM对象和数据库;例如VB,C#,F#,Iron Python,Iron Ruby,中间语言汇编器(IL)
托管模块 PE32或PE32+头,CLR头,元数据,IL代码
CLR 公共语言运行时,Common Language Runtime);是一个可由多种编程语言使用的运行时,CLR的核心功能(内存管理程序集加载安全性异常处理线程同步)可由面向CLR的所有语言使用。
编译器 语法检查器和“正确代码”分析器
IL(中间语言)代码 又叫托管代码,中间语言(Intermediate Language)
JIT 要把方法的IL在运行时转换成CPU指令(又叫本机代码),这是CLR的JIT(just-in-time或者叫“即时”)编译器的职责
unsafe 不安全的代码,允许直接操作内存地址,并可操作这些地址处的字节
CTS Common Type System,通用类型系统

CLR via C# - 图1

现在我们想想为什么要编译两次?

  • 因为这样的话,无论用C#、VB、F#这些东西你都可以生成一样的包含IL代码的托管程序集,然后这个托管程序集在CLR上运行,也就是说可以混合写代码,一个C#代码可以调用VB代码的DLL,用最适合的语言做最适合的事情。
  • 并且在CLR监视之下执行的IL代码因为在执行前会进行安全校验,所以会提高程序的健壮性和可靠性

其他参考