C语言有关CLR、CIL、CTS、CLS、CLI、BCL和FCL 的分和总结

至于CLR、CIL、CTS、CLS、CLI、BCL和FCL 的区别和总

C语言 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