关于CLR、CIL、CTS、CLS、CLI、BCL和FCL 的分别和总

有关CLR、CIL、CTS、CLS、CLI、BCL和FCL 的界别和总结

图片 1

设若一旦惦记深入学习.NET平台,那么标题中之这些重要字对你吧并无生疏,这些名词做了.NET庞大之生态系统,为了宏观认识.NET平台,学些.NET架构体系,针对有的常用常用名词的明亮是挺有必不可少的,未必强行记忆,但至少要明其的意思。

CLR,公共语言运行时(Common Language Runtime)

不论是通过其他语言构建产品,都须依托宿到一个阳台受到运作,这比较我们的软件运行在操作系统环境一致,操作系统也CLR提供了运转环境,使用.NET构建的先后同时运行在CLR之上,CRL为.NET程序的周转提供了温床,CLR提供基本的类库和运行引擎,基本类库封装操作系统函数供开发者方便调用,运行引擎用于编译并运行我们开发之主次。CLR包含.NET运行引擎和称CLI的类库。通过.NET平台构建的程序还基于CLR基础类库来促成,并且运行在CLR提供的周转引擎之上。

编译为托管代码时,编译器将源代码翻译啊 Microsoft 中间语言
(MSIL),这是同样组好中地换为本机代码都独立为 CPU 的下令。MSIL
包括用于加载、存储和初始化对象同对目标调用方法的授命,还包用于算术和逻辑运算、控制流、直接内存访问、异常处理同外操作的下令。要如代码可运行,必须先行拿
MSIL 转换为一定于 CPU 的代码,这通常是经过实时 (JIT)
编译器来就的。由于国有语言运行库为它支持之诸种计算机结构都提供了一如既往种或又
JIT 编译器,因此同一组 MSIL 可以以所支持的别样组织及 JIT 编译和运作。

CIL,公共中间语言(Common Intermediate Language)

CLI,简称微软中路语言(MSIL)或者中间语言(IL)。CIL是编译器将.NET代码编译成国有语言运行时(CLR)能够识别的中间代码。它是平等种植在高级语言(例如C#)和CPU指令中的一模一样种语言。当用户编译一个.NET主次时,编译器(例如VisualStudio)将C#源代码编译转换成中语言
(MSIL),它是平等栽能让CLR转换成为CPU指令的中游语言,当行这些中级语言时,CLR提供的实时(JIT)编译器将它转化为CPU特定的代码。由于国有语言运行库支持多实时编译器,因此与同截中间语言代码可以于不同之编译器实时编译并运行于不同之CPU结构及。从理论及来说,MSIL将解除多年来说业界面临不同语言里的纷争。在.NET的世界面临可能出现下面的情景有些代码可以就此C++实现,另一样局部代码使用C#还是VB.NET完成的,但是最后这些代码都用被转移为中等语言。这被程序员提供了极大的灵活性,程序员可以挑选自己深谙的言语,并且更为无用也上不断出的新语言而不快了。

CTS,通用项目系统(Common Type System)

CTS是一律栽类型系统和语言专业,它亦可确保CLR能够分辨和拍卖的种,所有.NET开发语言中的类,无论时VS.NET类型或者C#.NET类型最终还见面给编译成CLR能够辨识的CTS类型,因此CTS是.NET平台类的悬空。例如VB.NET中的integer类型和C#受到的int类型都编译成CTS的System.Int32品类。如果某种语言编写的次会当CLR上运行,并无能够证实这种语言完全符合CTS的专业。例如使用C++编写的代码,部分代码并无符合CTS规范,在编译时将当下有的不适合CTS的代码会叫编译成原始代码本地CPU指令而休中间代码。

CLS,公共语言专业(Common Language Specification)

CLS是CTS的一个子集,所有.NET语言都应当遵照这规则才能够创建和其余语言可相互操作的应用程序,但一旦专注的是以要每语言可以互相操作,只能利用CLS所列有底功力对象,这些职能统称为和CLS兼容的力量,它是于.NET平台达成运行语言的极致小规范,正因为.NET上不同语言会轻松交互一样,例如C#编写程序时得以一直引用并以VB.NET编写的类库。为了达到这样的竞相,才制定出CLS规范,在.NET框架本身提供的有所类库(并非所有)都是与CLS兼容的,在查看MSDN文档时,不配合的类及道都于专门标志为非般配,例如C#丁之System.UInt32尽管标志为”此API不兼容CLS。兼容
CLS的代表API为
Int64。“,这说明并无是有着的言语(例如VB.NET或J#)都支持无符号的数据类型,但这种数量类和CLS不匹配的。

CLI,公共语言基础架构(Common Language Infrastructure)

CLI是一个开的技艺标准。它是出于微软协同惠普以及英特尔为2000年向ECMA倡议的。通用语言基础架构定义了构成.NET
Framework基础结构的可执行码以及代码的运转时环境之正经,它定义了一个语言无关之跨体系结构的运转环境,这叫开发者可以据此规范内定义的各种高档语言来开发软件,并且无需修正即可将软件运行于不同的处理器体系布局及。CLI有时候会暨CLR混用。但严峻意义及说,这是不对的。因为CLI是同一种标准,而CLR则是对这种专业之一个兑现。

欧洲计算机制造商协会(ECMA)已经深受2001年10月13日批准C#语言专业(ECMA-334)成为平等种植新出生的微处理器产业标准。同时国际标准组织ISO也允许该规范上该组织的审批阶段。并且,作为.NET与CLR的中心组成部分,CLI与C#呢还要取得了ECMA的批准(ECMA-335)。拥有了C#跟CLI这半桩专业,你可友善写起能够运转于任何操作系统及之.NET平台(只要你肯)。如前所述,著名的MONO项目就算是这般干的,MONO项目包括三单主导之有的:一个C#语言的编译器,一个CLI和一个类库。

BCL,基础类库(Base Class Library)

BCL是一个公编程框架,称为基类库,所有语言的开发者都能够利用它。是CLI(Common
Language
Infrastructure,公共语言基础结构)的标准之一,主要包括:执行网络操作,执行I/O操作,安全治本,文本操作,数据库操作,XML操作,与事件日志交互,跟踪以及片确诊操作,使用非托管代码,创建与调用动态代码等,粒度相对比小,为保有框架提供基础支撑。

FCL,框架类库(Framework Class Library)

FCL提供了杀粒度的编程框架,它是对准不同应用设计的框架
,FCL大部分兑现还引用了BCL,例如我们常说之开支框架:ASP.NET、MVC、WCF和WPF等等,提供了针对性不同层面的编程框架

转载自:

http://www.xcode.me/more/clr-cil-cts-cls-cli-bcl-fcl