1.1.2 C++(www.cppentry.com)
与C#不同,C++(www.cppentry.com)代码总是编译成本地代码。本地代码是针对编译程序的处理器的机器码。为了方便,我们约定这里讨论的是本地编译的C++(www.cppentry.com)代码,而不是通过C++(www.cppentry.com)/CLI实现的托管C++(www.cppentry.com)。如果希望本地C++(www.cppentry.com)应用程序运行在不同的平台,比如32位平台和64位平台,那么必须分别单独编译。通常,本地的二进制输出不是跨平台兼容的。
而CLR构建的基础--CLI(Common Language Infrastructure,公共语言基础设施)是一个国际标准 ,所以中间语言是跨平台兼容的。这个标准正被快速推动实施,也正在Microsoft Windows之外的平台上实现。
注解 建议你看看Mono团队所取得的成果,他们正在其他平台创建开源的虚拟执行系统(VES)。
CLI定义了托管代码的可移植的执行(Portable Executable,PE)文件格式。因此可以在Windows平台上实际编译一个C#程序,其输出在Windows和Linux平台都可以执行而不需要重新编译,因为甚至文件格式都是标准的 。这个级别的可移植性非常便利,这是COM/DCOM设计者以前梦寐以求的,但由于种种原因,它没有在这个层次上取得跨越异构平台的成功 。失败的主要原因之一就是,COM对描述类型及其依赖关系缺乏有足够表现力的、可扩展的机制。而CLI通过引入元数据轻而易举地解决了这个问题。我们将在第2章介绍元数据。