买了.NET本质论有一个多月了,零零碎碎的看到了第五章,竟然突然发现连最基本的几个概念都还没搞清楚,看来笔记还是要记得了 :)
--------------------------------------------------------------------------
1. CTS (Common type system, 通用类型系统) : 语言无关的(language-neutral)类型系统,用于CLI原数据和指令.
2. CLS (Common Language Specification, 公共语言规范):CTS的子集, 所有与CLI兼容的编程语言都必须遵守它.
3. CLI (Common Language Infrastructure, 公共语言架构): 由ECMA批准的一组规范, 它描述了CLR的公开方面
4. CLR (Common Language Runtime, 公共语言运行库) : MS用于Windows 的CLI实现
5. CIL (Common Intermediate Language, 公共中间语言) : CLI使用的架构无关(architecture-neutural)的指令集
(以上摘自<<.NET本质论>>)
在第一章<<CLR是一个更好的COM>>中,作者已经介绍了大致的关系. 首先, CLI是MS向ECMA提交的一组标准, 它包含了CTS和CIL.即:
CLI = CTS + CIL
有关CLS,可以从.NET提供的文档(v1.1)中找到如下解释:
通用类型系统定义了如何在运行库中声明、使用和管理类型,同时也是运行库支持跨语言集成的一个重要组成部分。通用类型系统执行以下功能:
建立一个支持跨语言集成、类型安全和高性能代码执行的框架。
提供一个支持完整实现多种编程语言的面向对象的模型。
定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用。
继续, 作者指出了 CLR是CLI这一规范(Specification)的一种(也是当前唯一的一种)实现(Implementation).,即
CLR -> CLI
最让我迷惑的是CLS, 书中说它是CTS的子集,.与CLI兼容的编程语言都必须遵守CLS. 在.NET的文档中说:
CLS 规则定义了通用类型系统的子集,即所有适用于公共类型系统的规则都适用于 CLS,除非 CLS 中定义了更严格的规则。CLS 通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言互用性。CLS 还建立了 CLS 遵从性要求,这帮助您确定您的托管代码是否符合 CLS 以及一个给定的工具对托管代码(该代码是使用 CLS 功能的)开发的支持程度。
CLR最为CLI的一种实现,显然是在CLS的保护之中的.这个时候我们可以完全抛开CTS不管,因为它仅仅作为一种理论模型存在,远不如CLS在.NET中来得这么具体, 这个时候,从具体实现的角度来看,有以下关系:
CLR -> CLI = (CLS + CIL)