本文在最为概略的层次上对.NET涉及的一些名词进行解释,
包括:
通用语言基础架构(Common Language Infrastructure, CLI)、
虚拟执行系统(Virtual Execution System, VES)、
通用中间语言(Common Intermediate Language, CIL)、
通用语言运行平台(Common Language Runtime, CLR)、
托管代码(Managed Code)、
托管C++(Managed Extensions for C++)、
C++/CLI、
.NET框架(.NET Framework)。
CLI是一个开放技术规范,由微软联合惠普以及英特尔于2000年向ECMA倡议(连同C#语言标准),2001年12月被ECMA采纳为标准,2003年4月ISO也将其采纳为国际标准。它定义了一个语言无关的跨体系结构的运行环境,通俗的说它定义了一个虚拟机以及在这个虚拟机上运行的中间代码(类似于Java虚拟机和Java字节码),这个虚拟机叫做VES,中间语言叫做CIL。更具体的说CLI由以下几部分组成:
通用类型系统(Common Type System, CTS)
元数据系统(Metadata)
通用语言规范(Common Language Specification, CLS)
虚拟执行系统(Virtual Execution System, VES)
通用中间语言(Common Intermediate Language, CIL)
框架(Framework)
值得一提的是, CIL原本叫做微软中间语言,即Microsoft Intermediate Language, MSIL,是完全基于堆栈的,它通过即时编译(JIT)被VES加载到CPU上执行(这个Java字节码的解释执行有区别)。
CLR是CLI的微软实现版本,用来支持.NET,是微软为他们的.NET的虚拟机所选用的名称(这里的虚拟机和上一段的有些不同)。
所谓托管代码就是能在CLR上运行的代码。
托管C++,又称为C++托管扩展(Managed Extensions for C++),是对C++的一个属性和关键字的扩展,以便于在微软公司的.NET Framework进行编程,是C++的超集。
C++/CLI,是由微软设计,它在兼容原有的C++标准的同时,支持CLI标准(也就是可以运行在CLR上),它已经被ECMA通过成为正式的标准(一门新编程语言标准),它被用来代替托管C++。
.NET是由微软开发,一个致力于敏捷软件开发(Agile software development)、快速应用开发(Rapid application development)、平台无关性和网络透明化的软件开发平台。它以CLR为基础,通俗的说,.NET是微软对CLI标准的实现,这个实现的同时提供了强大的服务(包括类库、开发工具、编程语言的支持)。
下面把这些概念再理一下:
CLI是一个标准(或者说,规范),VES和CIL是其组成部分,CLR是微软对CLI标准的实现(这个关系类似于G++和C++标准);
所谓托管代码就是运行在CLR上的代码,托管C++是微软对C++的拓展,以使得它能在CLR上运行,从而和.NET集成,现在已经被C++/CLI取代,C++/CLI已经被采纳为标准,C++/CLI是一门区别于C++的新编程语言;
.NET是微软给开发人员提供的平台,以CLR为基础,是微软对CLI的实现,C#是.NET平台的首选编程语言。