托管执行和公共语言基础结构

本文介绍了C#程序的编译过程,重点讲述了公共中间语言(CIL)的作用及虚拟执行系统(VES)的工作原理,同时涵盖了托管代码的概念、类型安全、代码访问安全等关键特性。

    处理器不能直接解释一个程序集。程序集采用的是另一种语言,即公共中间语言(Common Intermediate Language, CIL),或者简称为中间语言(IL)。

    注意:CIL的另一种说法是MSIL,即Microsoft IL。本书采用的是CIL这种术语,因为该术语已被CIL标准采纳。从事C#开发的人在相互交流时,IL这个词显得很贴切,因为他们假定IL是指CIL,而不是其他类型的中间语言。

 

    C#编译器只是将C#源代码文件转化成这种中间语言。为了将CIL代码转换成处理器能够理解的机器码,还是执行一个额外的步奏(该步奏通常是执行时完成的)。这个步奏涉及C#程序执行中一个重要的元素:VES(virtual Execution System, 虚拟执行系统)。VES偶尔也被人们称为运行时,他根据需要来编译CIL代码,这个过程称为及时编译或者JIT编译(just—in—time compilation)。假如代码在像“运行时”这样的一个“代理”的上下文中执行,就将这些代码称为托管代码(managed code),而在“运行时”的控制下执行的过程称为托管执行(managed execution)。之所以叫做托管代码,是因为“运行时”管理着诸如内存分配,安全性和JIT编译等方面,从而控制了主要的程序行为。执行过程中不需要“运行时”的代码称为“非托管代码”(umanaged code)。

   VES规范被包含在一个包容面更广的规范中,即CLI(Common Language Infrastructure,公共语言基础结构)规范。作为一个国际性标准,CLI包含了以下几个方面的规范。

  • VES 或 “运行时”。
  • CIL。
  • 为了语言操作性提供支持的一个类型系统,称为CTS(Common Type System,公共类型系统)。
  • 如何编写能通过各种CLI兼容语言访问的库的指导原则,这部分内容具体放在公共语言规范(Common Language Specification,CLS)中。
  • 使各种服务能被CLI(包括程序集的布局过文件格式规范)识别的元数据。
  • 一个公共编程框架,称为基类库(Base Class Library,BCL),所有语言的开发者都能利用它。

假如在一个CLI实现的上下文中运行,那么程序员不需要直接编写代码,就能够使用大量服务和特性,包括如下方面。

  1. 语言互操作性:不同源语言之间的互操作性。语言编译器将每一种源语言转换成相同的中间语言(CIL),从而实现这种互操作性。
  2. 类型安全:检查类型间的转换,确保只有相互兼容的类型才会转换,这有助于防止缓冲区溢出——造成安全问题的一个主要诱因。
  3. 代码访问安全性:程序集开发者的代码有权在计算机上执行的证明。
  4. 垃圾回收:一种内存管理机制,能自动释放由“运行时”为数据分配的空间。
  5. 平台可移植性:允许一个程序集在多种操作系统中运行。要做到这一点,一个显而易见的限制就是不能使用平台相关的库,所以,同java一样,不可避免地有一些“个性”问题需要解决。
  6. BCL:提供开发者能够(在所有CLI实现中)依赖的一个大型代码库,使他们不必亲自编写这些代码。

 

 

转载于:https://www.cnblogs.com/cwbo-win/archive/2012/12/24/2830698.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值