什么是公共语言运行时(CLR)
编译:编好程序选择生成时,从 源码编译到中间语言(IL),这个中间语言是.NET自已的一种语言格式,虽然它也是 EXE,但它并非直接可以执行的二进制代码,而是一种比源码更为紧凑的程序代码。
解释:软件执行的时候,系统会自动加载 .NET Framework 对中间语言形式的 EXE 进行解释运行。
它的过程分两步,首先是源代码到中间代码的“编译”,这一步严格说不是编译,只是将源代码翻译成了中间代码,但是形式上像是传统的编译-生成了可执行文 件。但是这个可执行文件并不是真正的可执行文件,需要.NET框架在你运行它的时候再及时翻译为CPU机指令,它的改进在于这个及时编译比传统的解释方式性能更好,因为程序中的指令不是每次运行都解释,而是在 程序首次运行时一次性编译(解释),只要程序没有退出,解释的过程就不再发生。
当然,上面这些都是比较传统的程序代码执行方式,从Java语言开始,一种新的程序语言执行方式产生了,这就是“中间码+虚拟机”执行机制。这种执 行方式,程序语言源代码需要被编译成一种特殊的中间码,这种中间码是不能直接执行的,它需要一个叫“虚拟机”的装置来管理和执行,可以是解释执行也可以是 编译执行。因为“虚拟机”可以参与和管理程序代码的执行,因此解决了很多传统编译语言一些致命的缺点,如垃圾内存回收、安全性检查等。也是因为如 此,.NET框架也采用了此种语言执行方式,这里管理和执行中间码“虚拟机”在.NET框架中就是公共语言运行时(CLR),它负责管理和执行由.NET 编译器编译产生的中间语言代码。
公共语言运行时的另外一个作用是可以轻松地实现跨平台。当然,条件是要在操作系统 上安装.NET Framework,这个跨语言的原理是和Java一样的,安装了语言运行时的操作系统就可以识别和运行中间语言代码。值得一提的是,虽然微软自己并不提 倡跨平台(跨平台会影响Windows操作系统的市场垄断),但现在已经出现了在Linux操作系统中运行和编辑.NET程序的平台,就是Mono平台。 该平台包括有C#编译器、公共语言运行时以及相关的一套.NET类库。Mono平台可使开发者开发的.NET应用程序不仅能在Windows上运行,也能 在任何支持Mono的操作系统上运行,包括现有的Linux和UNIX操作系统。
关于公共语言运行时还要注意,. NET里面的CLR和Java里面的虚拟机JVM是不同的,我们说Java的虚拟机一般是解释执行的,而CLR是编译执行,是在应用程序第一次被调用时一 次性编译成机器码再执行,这样做的好处一个是尽可能的避免了解释执行所带来的效率降低的问题;另外可以做到充分利用本机资源,CLR可以针对本地的资源进 行优化编译,这个特性人们考虑可能在将来会使.NET代码的执行效率甚至超过C++,因为C++编译器是通用的,并没有照顾到不同计算机本地资源的不同。