您所在的位置: 首页 > 读书频道 > 设计开发 > .Net系列 >

1.2.1 什么是公共语言运行时(CLR)

http://book.51cto.com  2008-06-17 13:07  周礼  清华大学出版社  我要评论(0)
  • 摘要:《C#和.NET 3.0第一步》第1章详细介绍了.NET 3.0平台的相关概念,使读者对.NET平台的运行机制有一个初步的了解。这一节说的是公共语言运行时(CLR)。
  • 标签:.NET  Framework  语言  C#  C#和.NET 3.0第一步

1.2  .NET Framework的架构

现在的计算机编程语言的执行方式分为两种,一种是编译执行,一种是解释执行。编译执行是指源程序代码先由编译器编译成可执行的机器码,然后再执行;解释执行是指源代码程序被解释器直接读取执行。编译执行的编程语言我们常见的有C、C++、VB等,解释执行的有Python、Java Script、HTML等编程语言。编译执行和解释执行各有优缺点,比如我们说编译执行的语言通常执行效率高,而解释执行的语言通常可以灵活的跨平台,下图(图1.3)展现了编译执行和解释执行的原理:

 
图1.3  程序执行原理图

对于计算机来讲它只是一台机器,它只能认识0101011这样的二进制机器指令。编译执行一次性将高级语言源程序编译成二进制的可执行指令。而解释执行是由该语言(如HTML)运行环境(如浏览器)读取一条该语言的源程序,然后转变成二进制指令交给计算机执行。如果把高级语言源代码比作一本外文书籍,那么编译执行就是一次性翻译成中文,然后你再看;而解释执行就是你拿着个翻译机,读一行翻译一行的看。这里要注意的是,我们说编译执行的程序,源代码需要一个叫编译器的装置编译成操作系统可执行的机器码,形式比较统一,而解释执行就不一样了,它的形式和方法各异,我们说网页HTML代码它是靠浏览器解释执行的,而可以在Office中使用的脚本语言VBScript却是由Office来负责运行的。

1.2.1  什么是公共语言运行时(CLR)

当然,上面这些都是比较传统的程序代码执行方式,从Java语言开始,一种新的程序语言执行方式产生了,这就是“中间码+虚拟机”执行机制。这种执行方式,程序语言源代码需要被编译成一种特殊的中间码,这种中间码是不能直接执行的,它需要一个叫“虚拟机”的装置来管理和执行,可以是解释执行也可以是编译执行。因为“虚拟机”可以参与和管理程序代码的执行,因此解决了很多传统编译语言一些致命的缺点,如垃圾内存回收、安全性检查等。也是因为如此,.NET框架也采用了此种语言执行方式,这里管理和执行中间码“虚拟机”在.NET框架中就是公共语言运行时(CLR),它负责管理和执行由.NET编译器编译产生的中间语言代码。右图(图1.4)展示了.NET程序的执行原理:

 

整个执行过程是这样的,首先我们在开发环境Visual Studio .NET中编写C#代码,然后这些源代码被Visual Studio .NET中内置的C#编译器编译成中间语言代码(中间语言是一种类似于汇编的程序语言,还不是机器码,我们后面会专门介绍),最后中间语言代码由操作系统中.NET Framework的组件CLR管理和执行。另外,从上图你也可以看出,公共语言运行时的另外一个作用是可以轻松地实现跨平台。当然,条件是要在操作系统上安装.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++编译器是通用的,并没有照顾到不同计算机本地资源的不同。

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节
C++是垃圾语言?!
C#实用基础教程
专题:ASP.NET 2.0基础开发指南
.NET移动与嵌入式技术专题
.NET Framework新手入门专题
 
 验证码: (点击刷新验证码)   匿名发表
  • 网络工程师考试案例动手实验营

  • 作者:郭春柱
  • 本书依据2009年版《网络工程师考试大纲》的考核要求,深入研究了历年网络工程师考试试题的命题风格和试题结构,对考查的知识点..
Copyright©2005-2008 51CTO.COM 版权所有