澳门新萄京至于CLR、CIL、CTS、CLS、CLI、BCL和FCL 的别和总。什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT

至于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 编译和运作。

什么是.NET?

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指令而非中间代码。

发源:比尔盖茨以2000年底Professional Developers
Conference介绍了一个簇新的阳台叫做Next Generation Windows
Service,也就是后来的.NET。

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不匹配的。

软件层:.NET可以叫看作是在于操作系统及编程语言里的软件层,它可以支持多编程语言,包括C#,VB.NET,C++,F#,等等。

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和一个类库。

故而来有托管代码的框架、平台:传统的编译方式是”源代码→编译→可执行文件”,在.NET中编译方式是”源代码→编译→程序集→可执行文件”。编译后底次集带有IL代码和冠数据,在运行时又转换成为机器代码。

BCL,基础类库(Base Class Library)

BCL是一个公编程框架,称为基类库,所有语言的开发者都能运用其。是CLI(Common
Language
Infrastructure,公共语言功底结构)的专业之一,主要不外乎:执行网络操作,执行I/O操作,安全管理,文本操作,数据库操作,XML操作,与事件日志交互,跟踪及局部确诊操作,使用非托管代码,创建同调用动态代码等,粒度相对比较小,为具框架提供基础支撑。

随开发到执行等来说:开发阶段.NET提供了大之类库,在程序执行阶段,.NET提供了一个CLR运行时环境救助我们实时编译程序、进行安全检查、执行垃圾回收,管理内存等。

FCL,框架类库(Framework Class Library)

FCL提供了非常粒度的编程框架,它是指向不同采取设计的框架
,FCL大部分落实都引用了BCL,例如我们常说之开销框架:ASP.NET、MVC、WCF和WPF等等,提供了针对性不同范畴的编程框架

转载自:

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

 

 

规范:.NET包含了广大的正规,比如CIL,BCL, FCL, CTS, CLS,等等。

什么是IL?

 

IL,Intermediage
Language,中间语言,并无是CPU可以直接执行的地头机械语言,在转移成为计算机可以分辨的命之前,还要进行一个让叫做”Just
in
time”的老二破编译过程。在.NET框架下,任何语言,比如C++,VB.NET,C#,等等,在通过各自的编译器编译之后,都见面给转移成中语言。IL还有另外的2种叫法:CIL,Common
Intermediate Language;MSIL, Microsoft Intermediate Language。

 

查看IL代码,参考这里:http://www.cnblogs.com/darrenji/p/3967669.html

 

什么是CLI?

 

CLI,Common Language Infrastructure, 公用言语功底,
.NET的各种规范都循了是标准。

 

什么是BCL?

 

BCL, Basic Class Library, .NE也咱提供的基类库。

 

创建一个控制台项目。

 

把鼠标停留在Console上,并按照F12。

 

发现Console是System的成员,点击System。

 

发现System是mscorlib的成员,点击mscorlib。

 

发现mscorlib是一个程序集,位于C:\Program Files (x86)\Reference
Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll

 

否尽管是mscorlib包含了.NET的基类库。

 

string类型是否属于基类库呢?

 

把鼠标停留在string关键字上,并循F12。

 

意识string实际上是System.String类型,原来.NET为咱将主要字string和CLI标准System.String作了炫耀。

 

依此类推, btye映射了System.Byte, short映射了System.Int16, 等等。

 

譬如说string, byte,
short,等等,这些还是基元类型。所以,凡是将语言本省的要字与CLI的花色映射起来的,都吃基元类型。

 

什么是FCL?

 

FCL, Framework Class Library,
框架类库,提供的类库更多,BCL是FCL的子集。比如,在ASP.NET
MVC下提供了System.Web.MVC。

 

什么是CTS?

 

CTS, Common Type System,
公共项目系统。CTS规定了在编程语言中可以定义之上面,包括:类、结构、委托,类中的不二法门、字段、属性、事件等,还定义了一部分约束,比如具有品类且隐式继承自System.Object类型。

 

什么是CLS?

 

CLS, Common Language Specification,
公共语言专业,必须完全符合CTS的正统,是CTS的子集。比如C#编译生成的主次集来成千上万像样,VB编译生成的次第集为发诸多近乎,现在VB编译需要引用C#先后集的某某类,怎么处置为?

 

咱们得让C#次集中,需要让引述的是仿佛可CLS规范,.NET为咱准备了CLSCompliant特性。

 

[assembly:CLSCompliant(true)]

public class SomeClass

{    

}

 

什么是CLR?

 

CLR, Common Language Runtime,
公用言语运行时。IL代码需要经过CLR进行即经常编译才能够转换成机器代码。大致过程是:

 

编程语言代码编译生成程序集。程序集中的PE/COFF头包含了供Windows操作系统查看和动用的消息;CLR头告诉操作系统这是一个.NET先后集;程序集清单描述了先后集本身的音信,比如程序集标识、程序集带有的资源、组成程序集的公文,等等;元数据描述了次集带有的情,比如含有的模块、类型、类型成员、类型成员的可见性,等等。

 

CLR开始工作:管理应用程序域,加载与运转程序集, 安全检查,
将IL代码JIT编译成机器代码,异常处理, 垃圾回收,等等。

 

相关文章:

CLR如何加载程序集和程序集版本策略  
http://www.cnblogs.com/darrenji/p/4179916.html
查是否安装.NET Framework、.NET Framework的本子号、CLR版本号  
http://www.cnblogs.com/darrenji/p/3977406.html 
CLR是什么样为加载并工作的  
http://www.cnblogs.com/darrenji/p/4159259.html

 

什么是JIT?

 

JIT, just in time,
即时编译。在CLR中,把IL转换成为机器代码的干活授了JIT编译器。即时编译只以艺术第一差为调用时发。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注