如果要想深入学习.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等等,提供了针对不同层面的编程框架 。

关于CLR、CIL、CTS、CLS、CLI、BCL和FCL的更多相关文章

  1. 关于CLR、CIL、CTS、CLS、CLI、BCL和FCL 的区分与总结

    关于CLR.CIL.CTS.CLS.CLI.BCL和FCL 的区分与总结 如果要想深入学习.NET平台,那么标题中的这些关键字对你来说并不陌生,这些名词构成了.NET庞大的生态系统,为了宏观认识.NE ...

  2. 什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT

    什么是.NET? 起源:比尔盖茨在2000年的Professional Developers Conference介绍了一个崭新的平台叫作Next Generation Windows Service ...

  3. CLR Via第一 章 知识点整理(4) FCL、CTS、CLI和CLS

    FCL(Framework Class Library) Framework 类库: FCL是 .net Framework 包含的一组DLL程序集的统称,FCL包含了提供了很多功能,关于这一部分没有 ...

  4. .Net 面试题 3C(CTS,CLS,CLR)

    1.CTS(Common Type System)通用类型系统 CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展.任何以.NET平台作为目标的语言必须建立它的数 ...

  5. C# 中间语言、CLR、CTS、CLS

    c#  中间语言.CLR.CTS.CLS IL中间语言,区分大小写 中间语言的主要特征: 1.  面向 对象和使 用接口 2. 值类型和引 用类 型之间的 显 著差异 3.  强 数据类型化 4. 使 ...

  6. CTS,CLS,CLR

    1)CTS通用类型系统(Common Type System) CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展.任何以.NET平台作为目标的语言必须建立它的数 ...

  7. CLR、CIL、CTS、CLS、CLI、BCL和FCL,JIT,IL,GC

    如果要想深入学习.NET平台,那么标题中的这些关键字对你来说并不陌生,这些名词构成了.NET庞大的生态系统,为了宏观认识.NET平台,学些.NET架构体系,针对一些常用常用名词的理解是很有必要的,未必 ...

  8. “菜”鸟理解.NET Framework(CLI,CLR,CTS,CLS,BCL,FCL)

    既然要学.NET,就要先认识认识她,我不喜欢大段大段文字的东西,自己通过理解,画个图,来看看.NET的沉鱼落雁,闭月羞花之容. 最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基 ...

  9. 浅谈CLR CTS CLS。。。

    So  The First Is CLR CLR的全程是Common Language Runtime 公共语言运行时 可以把他理解为包含运行.net程序的引擎 和 一堆符合公共语言基础(CLI)的类 ...

随机推荐

  1. EXPORT_SYMBOL的使用

    转自:http://blog.csdn.net/cailiwei712/article/details/7998525 在查看内核驱动代码的时候会经常看到在一些函数后面总会跟EXPORT_SYMBOL ...

  2. 8-07CONTIUE 、 BREAK、RETURN

    CONTIUE: 可以让程序跳过CONTIUE关键字之后的语句,回到WHILE循环的第一行命令. BREAK:让程序跳出循环,结束WHILE的循环. BREAK: 让系统完全跳出循环,结束WHILE循 ...

  3. Image Blending

    给定两幅或者多幅图像,如何无缝自然拼接,这就是Image Blending 需要解决的问题(演示效果请看http://blog.sina.com.cn/s/blog_67f034a50100iuqt. ...

  4. 【Mybatis高级映射】一对一映射、一对多映射、多对多映射

    前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...

  5. NOIP2009潜伏者【B003】

    [B003]潜伏者[难度B]—————————————————————————————————————————————————————————————————— [题目要求] R国和S国正陷入战火之中 ...

  6. 中间人攻击(MITM)姿势总结

    相关学习资料 http://www.cnblogs.com/LittleHann/p/3733469.html http://www.cnblogs.com/LittleHann/p/3738141. ...

  7. ACM: NBUT 1107 盒子游戏 - 简单博弈

     NBUT 1107  盒子游戏 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:  Practice  Appoint ...

  8. 【BZOJ】3561: DZY Loves Math VI

    题意 求\(\sum_{i=1}^{n} \sum_{j=1}^{m} lcm(i, j)^{gcd(i, j)}\)(\(n, m<=500000\)) 分析 很显然要死推莫比乌斯 题解 设\ ...

  9. Redis安装部署

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据 可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(dif ...

  10. php排序

    关于order by排序:单条件排序:order by id(按照id排序默认从小到大) order by id desc(按照id排序从大到小) 多条件排序:order by date,id(先按照 ...