CLI, CIL&CLR

本文介绍了CLI(Common Language Infrastructure)的概念及其组成部分CTS、Metadata、CLS和VES,并详细解释了CLR(Common Language Runtime)作为CLI的一种实现方式,以及CIL(Common Intermediate Language)在.NET框架中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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以及其他高级语言的关系 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值