什么是CLI?什么CLR?他们直接是什么关系?

CLI 公共语言基础设施(Common Language Infrastructure), 跨语言 跨平台的运行环境规范。CLR 就是CLI这套规范的具体实现,我们可以称呼CLR为执行引擎或者运行环境。CLI还可以映射出除CLR之外的运行环境 例如:.net core\nomo

这使得开发者可以用规范内定义的各种高级语言来开发软件,并且无须修正即可将软件运行在不同的平台上。CLI是一个开放型的技术规范,由微软、惠普和英特尔于2000年向ECMA倡议的。说白了,CLI就是一套规范,CLR是对CLI的一种实现。那么CLI这份规范中具体定义了哪些内容呢?

该标准化文件包括以下四部分:

  • CTS
  • IL:
  • 底层文件
  • 元数据格式

CTS, Common Type System, 公共类型系统。CTS规定了在编程语言中可以定义的方面,包括:类、结构、委托,类中的方法、字段、属性、事件等,还定义了一些约束,比如所有类型都隐式继承自System.Object类型。

CLS, Common Language Specification, 公共语言规范,必须完全符合CTS的标准,是CTS的子集。比如C#编译生成的程序集有很多类dll exe

 IL,Intermediage Language,中间语言,CLR把C# java F#等语言编写的代码都统编译成IL,这样就可以在IL 这一层实现 所有编程语言的统一。vs将编译后的IL存储在程序集中(Dll\exe)l文件中。  当打开软件的时候 CLR程序集中的IL  二次编译成机器可识别的语言。

由于不同语言所写的程序集在IL层面已经实行统一,所以c# 可以调用F#的程序集,java也可以调用C# 写的程序集。