[C++/CLI编程宝典][2]什么是C++/CLI语言

对于什么是C++/CLI,我们首先能够简单的将其名字划分为两部分来理解,第一,C++,我们熟悉的眼下被广泛使用的面向对象的ISO国际标准的高级语言,也称为ISOC++,我们这里以后均称其为ISOC++;第二,CLI,我们能够觉得是对ISOC++在CLI上扩展。CLI是通用语言框架的缩写,微软的.NET就是架构在CLI其上,尽管CLI如今也是ISO标准,可是C++/CLI并非ISOC++委员会对其进行的扩展,所以C++/CLI并非新版的ISOC++标准,它仅仅是微软针他的CLI实现.NET的扩展。尽管C++/CLI眼下并非ISO标准,可是C++/CLI结合了ISOC++和.NET具有超强的能力,这也就注定了它不可能被我们忽视。

事实上C++/CLI除了包括ISOC++和CLI扩展,还有它之所以强大的更重要的原因就是它实现了ISOC++和.NET的无缝连接。以下就具体看这三方面:

1)ISOC++语言

我们知道C++是一门ISO的面向对象的语言,对于这门语言我们也从下面三个方面来看,也正是这三个主要方面决定了他被广泛的使用。第一,C++是一个功能强大的语言。比方C++语言本身提供的基于C语言的内嵌类型,数组,结构体和指针等,C++比C新增加的面向对象的Class,继承,多态和模板等,还有C++标准模板库(STL)提供的实际开发其中经常使用的数据结构和算法的实现;第二,大量的开源和第三方库,假设在windows上使用C++开发,首先我们能够借助microsoft对C++提供的强有力的支持,比方说VS编译器,还有UI库MFC,还有ATL等;除此之外我们还能够看到其它的很多非microsoft的开源的和第三方的支持,比方说Boost非常大程度的扩充了STL,提供了很多其它更高级的功能,还有Loki把C++与设计模式结合起来,还有非常多的第三方的UI库,比方QT,WxWindows,WTL,GTK等,第三方的网络通信库,比方ACE,StreamModule等,第三方的XML库,比方Xerces,CMarkup,tinyxml等,第三方的科学计算库,比方Blitz++,MTL等,第三方的游戏开发库,比方OGRE,KlayGE等,第三方的线程库,比方C++ Threads,ZThreads等,还有其它的非常多;第三,C++的高性能。C++的这一特性也是毋庸质疑的,我们知道的大部分的操作系统,嵌入式开发,游戏,图像软件离不开C++,这都是跟C++的高性能有非常大的关系,单从这一点来看,这就是非常多现代的其它的高级语言所欠缺的,也正是这点注定了C++以后仍然有非常长的路要走。

2)CLI

CLI(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所执行须要的虚拟执行环境的规范。更通俗的我们能够说它是一个虚拟平台,是操作系统和应用程序间的一层抽象。微软的.NET的基础CLR(Common Language Runtime,通用语言执行时)就是CLI的一个实例。CLI基本的组成部分有:CTS,Metadata,CLS和VES。

CTS(Common Type System,通用类型系统)是CLI的基础,它是一个类型规范,定义了全部CLI平台上能够定义的类型的集合,全部基于CLI的语言类型都是CTS的一个子集,眼下C++/CLI是对CTS描写叙述支持最好的高级语言。

Metadata(元数据):用来描写叙述和引用CTS定义的类型,元数据以一种独立于不论什么语言的形式存储,正是元数据赋予了组建自描写叙述的能力。

CLS(Common Language Specification,通用语言规范),是用以确保全部CLI语言可以互操作的一组规则,它定义了全部CLI语言都必须支持的一个最小功能集(一个CTS的子集)。各CLI语言可以选择自己对CTS的一部分的映射,可是为了确保不同语言的交互,至少应该支持CLS所定义的最小功能集。

VES(Virtual Execution System,虚拟运行系统),为CLI程序提供了一个在各种可能的平台上载入和运行托管代码的虚拟机环境,仅仅是一个规范,比方微软和momo就各有自己的实现。.NET的CLR的JIT和GC应该属于此范围。

.NET Framework是微软对CLI的一个实现,当然也是眼下最好的实现,.NET Framework主要包括CLR和BCL,CLR是核心也即CLI的实现,BCL是一套通用的代码库,能够被全部的.NET语言(C#, VB.NET, C++/CLI)程序所使用。

3)ISOC++和CLI的无缝连接

C++/CLI支持对本地ISOC++编程和.NET托管编程的无缝集成,不是简单的混合,不仅可以像.NET调用windows APIs一样通过P/Invoke来实现函数互调,并且可以实现类型class级和ISOC++和.NET类库的相互使用,更强的是可以实现类型的混合。为了实现无缝连接,绝大多数的曾经的ISO C++代码编译后将得到托管代码,部分不能编译为托管IL的採用P/Invoke调用实现。代码托管,可是数据并不托管,原来ISOC++中本地堆内的数据仍位于本地堆中。

综上,我们能够总结C++/CLI是ISOC++在.NET的扩展,是ISOC++和.NET的无缝结合。


作者:iTech
出处:http://itech.cnblogs.com/ 
欢迎转载,欢迎增加qq交流群172758282来讨论build_release/Linux/Perl/Python/Jenkins!

对于什么是C++/CLI,我们首先能够简单的将其名字划分为两部分来理解,第一,C++,我们熟悉的眼下被广泛使用的面向对象的ISO国际标准的高级语言,也称为ISOC++,我们这里以后均称其为ISOC++;第二,CLI,我们能够觉得是对ISOC++在CLI上扩展。CLI是通用语言框架的缩写,微软的.NET就是架构在CLI其上,尽管CLI如今也是ISO标准,可是C++/CLI并非ISOC++委员会对其进行的扩展,所以C++/CLI并非新版的ISOC++标准,它仅仅是微软针他的CLI实现.NET的扩展。尽管C++/CLI眼下并非ISO标准,可是C++/CLI结合了ISOC++和.NET具有超强的能力,这也就注定了它不可能被我们忽视。

事实上C++/CLI除了包括ISOC++和CLI扩展,还有它之所以强大的更重要的原因就是它实现了ISOC++和.NET的无缝连接。以下就具体看这三方面:

1)ISOC++语言

我们知道C++是一门ISO的面向对象的语言,对于这门语言我们也从下面三个方面来看,也正是这三个主要方面决定了他被广泛的使用。第一,C++是一个功能强大的语言。比方C++语言本身提供的基于C语言的内嵌类型,数组,结构体和指针等,C++比C新增加的面向对象的Class,继承,多态和模板等,还有C++标准模板库(STL)提供的实际开发其中经常使用的数据结构和算法的实现;第二,大量的开源和第三方库,假设在windows上使用C++开发,首先我们能够借助microsoft对C++提供的强有力的支持,比方说VS编译器,还有UI库MFC,还有ATL等;除此之外我们还能够看到其它的很多非microsoft的开源的和第三方的支持,比方说Boost非常大程度的扩充了STL,提供了很多其它更高级的功能,还有Loki把C++与设计模式结合起来,还有非常多的第三方的UI库,比方QT,WxWindows,WTL,GTK等,第三方的网络通信库,比方ACE,StreamModule等,第三方的XML库,比方Xerces,CMarkup,tinyxml等,第三方的科学计算库,比方Blitz++,MTL等,第三方的游戏开发库,比方OGRE,KlayGE等,第三方的线程库,比方C++ Threads,ZThreads等,还有其它的非常多;第三,C++的高性能。C++的这一特性也是毋庸质疑的,我们知道的大部分的操作系统,嵌入式开发,游戏,图像软件离不开C++,这都是跟C++的高性能有非常大的关系,单从这一点来看,这就是非常多现代的其它的高级语言所欠缺的,也正是这点注定了C++以后仍然有非常长的路要走。

2)CLI

CLI(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所执行须要的虚拟执行环境的规范。更通俗的我们能够说它是一个虚拟平台,是操作系统和应用程序间的一层抽象。微软的.NET的基础CLR(Common Language Runtime,通用语言执行时)就是CLI的一个实例。CLI基本的组成部分有:CTS,Metadata,CLS和VES。

CTS(Common Type System,通用类型系统)是CLI的基础,它是一个类型规范,定义了全部CLI平台上能够定义的类型的集合,全部基于CLI的语言类型都是CTS的一个子集,眼下C++/CLI是对CTS描写叙述支持最好的高级语言。

Metadata(元数据):用来描写叙述和引用CTS定义的类型,元数据以一种独立于不论什么语言的形式存储,正是元数据赋予了组建自描写叙述的能力。

CLS(Common Language Specification,通用语言规范),是用以确保全部CLI语言可以互操作的一组规则,它定义了全部CLI语言都必须支持的一个最小功能集(一个CTS的子集)。各CLI语言可以选择自己对CTS的一部分的映射,可是为了确保不同语言的交互,至少应该支持CLS所定义的最小功能集。

VES(Virtual Execution System,虚拟运行系统),为CLI程序提供了一个在各种可能的平台上载入和运行托管代码的虚拟机环境,仅仅是一个规范,比方微软和momo就各有自己的实现。.NET的CLR的JIT和GC应该属于此范围。

.NET Framework是微软对CLI的一个实现,当然也是眼下最好的实现,.NET Framework主要包括CLR和BCL,CLR是核心也即CLI的实现,BCL是一套通用的代码库,能够被全部的.NET语言(C#, VB.NET, C++/CLI)程序所使用。

3)ISOC++和CLI的无缝连接

C++/CLI支持对本地ISOC++编程和.NET托管编程的无缝集成,不是简单的混合,不仅可以像.NET调用windows APIs一样通过P/Invoke来实现函数互调,并且可以实现类型class级和ISOC++和.NET类库的相互使用,更强的是可以实现类型的混合。为了实现无缝连接,绝大多数的曾经的ISO C++代码编译后将得到托管代码,部分不能编译为托管IL的採用P/Invoke调用实现。代码托管,可是数据并不托管,原来ISOC++中本地堆内的数据仍位于本地堆中。

综上,我们能够总结C++/CLI是ISOC++在.NET的扩展,是ISOC++和.NET的无缝结合。