CLI(Common Language Infrastructure)是由微软公司制定的一个开放标准或规范(open specification),并有ECMA-335和ISO/IEC 23271两个版本。它描述了一个通用的系统架构(artechiture),使得任何使用这个架构的高级语言如C#和Managed C++等能够在不重写任何代码的情况下运行于任何计算机架构和平台(platform)。简单地说,CLI规定了:1)高级语言使用CLI的前提;2)不同计算机平台上的CLI环境。从标准上,CLI由四部分组成:
  1. CTS(The Common Type System):符合CLI规范的高级语言都必须有的类型,包括相关操作。
  2. Metadata:独立于具体语言的程序元信息,以便于在不同工具和程序员间交流和共享。
  3. CLS(Common Language Specification):符合CLI规范的高级语言必须遵循的一系列规则,以保证不同语言间的顺利通信。
  4. VES(Virtual Execution System):VES是CLI规范中关于该infrastructure动力部分的规范,它描述了一个像虚拟机(Virtual Machine)一样的编译器,如何利用元信息,在运行时将用不同语言写成的程序(实际上这时已经是CIL)编译结合成本地机器码。所以可以想像,VES是与机器架构相关的(artechiture or platform specific),不同的平台,得有不同的VES实现,从而保证所有语言代码的可移值性(portability)。

CLR(Common Language Runtime)是微软的CLI实现,实际上就是.NET中的虚拟机,模拟一个中立的平台;它不再是规范(specification)或标准(standard),而是一个具体实施(implementation)。当不同的计算机平台包含了相应的CLR环境(environment)后,任何用基于.NET的高级语言如C++和Delphi所编写的代码只需要以CLR为目的环境,就能免去为不同平台重写不同本地代码(native code)的麻烦,从而方便移值。基于CLR的C++叫做C++/CLR,与ANSI/ISO C++相对而言。

CIL(Common Intermediate Language)是一种平台无关的中间语言(intermediate language),实际上它和汇编语言(assembly language)很像,即与机器语言(machine language)一一对应,只不过已经从具体的硬件平台抽象出来了,并且具有一定OOP的特性。它是最低层的可读代码。其代码都是一种叫bytecode的东西,即以opcode的形式(机器最原始的指令,由一个字节表示)实现所有指令(instruction)。基于.NET的高级语言都将被编译为CIL,然后汇编为bytecode。CIL有时也被称为MSIL(Microsoft Intermediate Language或Machine Symbolic Intermediate Language)。

 

CLI, CIL, CLR以及其他高级语言的关系 

 

Logo

开源、云原生的融合云平台

更多推荐