.NET的初级组成是CLI和CLR。CLI是一套运作环境规范,包括一般系统、基础类库和与机器无关的中间代码,全称为Common Language Infrastructure。CLR则是确认操作密码符合CLI的平台。在通用中间语言(CIL)运行前,CLR必须将指令及时编译转换成原始机器代码(Native Code)。通用语言运行库(CLR)则是微软对此标准(CLI)的实现。CIL原本叫做微软中间语言,即Microsoft Intermediate Language,简称MSIL。
通用语言基础架构(Common Language Infrastructure,简称CLI)
CLI标准包含以下更详细的规范
- 通用类型系统(Common Type System, CTS)
- 元数据系统(Metadata)
- 通用语言规范(Common Language Specification, CLS)
- 虚拟执行系统(Virtual Execution System, VES)
- 通用中间语言(Common Intermediate Language, CIL)
- 框架(Framework)
适合CLI规范的程序都是编译成通用中间语言,之后在执行过程中被虚拟执行系统的即时编译技术编译为机器码从而执行。
CLI的实现
- Microsoft .NET Framework - 微软提供的面向Windows系统的实现,提供了各种各样的程序库,工具等。
- Microsoft Silverlight - 微软提供的一个跨平台实现,能同时在Windows和Macintosh操作系统上运行。
- .NET Compact Framework - 微软提供的面向便携式系统的商用实现。
- Microsoft XNA - 微软提供给游戏开发人员使用的一个CLI,面向的是XBOX和Windows Vista。
- Rotor - Microsoft Shared Source CLI(Rotor)微软开发出来的一个在Window,Mac OS X和FreeBSD上运行的一个CLI实现,但微软并没有授权用Rotor开发商业程序,只是一个学习工具。
- Mono - 由Novell赞助开发的开源实现,它能够应用于Linux,Mac OS等多种操作系统。
- dotGNU - dotGNU项目也是一个开源并且自由的实现。
通用中间语言(Common Intermediate Language,简称CIL,发音为”sill”或”kill”)
通用语言运行平台(Common Language Runtime,简称CLR)
Compiler:编译程序
.Net compatible languages compile to a second platform-neutral language called Common Intermediate Language(CIL).
.Net兼容语言编译为第二种平台无关语言,称为通用中间语言(CIL)
The platform-special Common Language Runtime(CLR) compiles CIL to machine-readable code that can be executed on the current platform.
平台专用公共语言运行库(CLR)将CIL编译为可在当前平台上执行的机器可读代码。
通用语言运行平台(Common Language Runtime,简称CLR)是微软为他们的.NET的虚拟机所选用的名称。它是微软对通用语言架构(CLI)的实现版本,它定义了一个代码运行的环境。CLR运行一种称为通用中间语言的字节码,这个是微软的通用中间语言实现版本。
CLR运行在微软的视窗操作系统上。查看通用语言架构可以找到该规格的实现版本列表。其中有一些版本是运行在非Windows的操作系统中。
CLR的主要功能如下
- 基类库支持 Base Class Library Support
- 内存管理 Memory Management
- 线程管理 Thread Management
- 垃圾回收 Garbage Collection
- 安全性 Security
- 类型检查 Type Checker
- 异常管理 Exception Manager
- 调试管理 Debug Engine
- 中间码(MSIL)到机器代码(Native)编译
- 类别装载 Class Loader
开发人员使用高级编程语言撰写程序。接下来编译器将代码编译成微软的中继语言(MSIL)。运行的时候CLR会将MSIL码转换为操作系统的原生码(Native code)。CLR内置有即时编译(JIT)编译器。
Compiler:编译程序
Source code:源代码
byte code:字节码
Native code:机器码
MSIL Code:中继语言代码
即时编译(英语:Just-in-time compilation,缩写:JIT)
下图展示了 C# 源代码文件、.NET Framework 类库、程序集和 CLR 的编译时和运行时关系。
(图片来源:Microsoft C# 语言和 .NET Framework 介绍)
(图片来源:CIL or MSIL | Microsoft Intermediate Language or Common Intermediate Language)
.NET 程序编写运行的流程为:
(图片来源:.NET CLR)