|
|
|
|
移动端

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

《C# 6.0本质论(第5版)》第1章C#概述,本章使用传统HelloWorld程序介绍C#,重点是C#语法基础,包括在C#程序中定义入口。通过本章的学习,将熟悉C#的语法风格和结构,并能写最简单的C#程序。本节为大家介绍托管执行和公共语言基础结构。

作者:周靖/庞燕 译来源:人民邮电出版社|2017-07-21 14:55

【新品产上线啦】51CTO播客,随时随地,碎片化学习

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

处理器不能直接解释程序集。程序集采用的是另一种语言,即公共中间语言(Common Intermediate Language,CIL),或简称为中间语言(IL)[10]。C#编译器将C#源代码文件转换成这种中间语言。为了将CIL代码转换成处理器能理解的机器码,还要完成一个额外的步骤(通常在执行时进行)。该步骤涉及C#程序执行中的一个重要元素:虚拟执行系统(Virtual Execution System,VES)。VES偶尔也称为运行时,它根据需要编译CIL代码,这个过程称为即时编译或者JIT编译(just-in-time compilation)。假如代码在像“运行时”这样的一个“代理”的上下文中执行,就将这些代码称为托管代码(managed code),而在“运行时”的控制下执行的过程称为托管执行(managed execution)。之所以称为托管代码,是因为“运行时”管理着诸如内存分配、安全性和JIT编译等方面,从而控制了主要的程序行为。执行过程中不需要“运行时”的代码称为本机代码(native code)或非托管代码(unmanaged code)。

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

VES或“运行时”。

CIL。

为语言互操作性提供支持的类型系统,称为公共类型系统(Common Type System,CTS)。

如何编写能通过CLI兼容语言访问的库的指导原则,这部分内容放在公共语言规范(Common Language Specification,CLS)中。

使各种服务能被CLI识别的元数据(包括程序集的布局或文件格式规范)。

一个公共编程框架,称为基类库(Base Class Library,BCL),所有语言的开发者都能利用它。
注意

“运行时”既可能指“程序执行的时候”,也可能指“虚拟执行系统”。为了明确起见,本书使用“执行时”来表示“程序执行的时候”,用“运行时”表示负责管理C#程序执行的代理。

如果是在一个CLI实现的上下文中运行,程序员不需要直接写代码就能使用大量服务和功能,包括如下几个。


语言互操作性:不同源语言间的互操作性。语言编译器将每种源语言转换成相同中间语言(CIL)来实现这种互操作性。

类型安全:检查类型间转换,确保只在兼容类型之间转换。这有助于防止发生缓冲区溢出——安全问题的一个主要诱因。

代码访问安全性:程序集开发者的代码有权在计算机上执行的证明。

垃圾回收:一种内存管理机制,自动释放“运行时”为数据分配的空间。

平台可移植性:允许程序集在多种操作系统中运行。要做到这一点,一个显而易见的限制就是不能使用平台相关的库。所以,同Java一样,不可避免地有一些“个性”问题需要解决。

BCL:提供开发者能够(在所有CLI实现中)依赖的大型代码库,使他们不必亲自编写这些代码。
注意

本节简单介绍CLI,目的是熟悉C#程序的执行环境。本节还提及了本书后面将会用到的一些术语。第21章专门探讨CLI及其与C#开发者的关系。虽然那一章在本书的最后,但它的内容并不依赖于之前的任何章节。假如想多了解CLI,随时都可以跳到那一章。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

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

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网管第一课——计算机网络原理

本书是《网管第一课》系列图书中的第一本,是专门针对高校和培训机构编写的,其主要特点是内容细而精、针对性强。书中内容全是经过精心挑选...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊