您怎么看待 C++/CLI?

翻译 2007年09月23日 21:21:00
 
来源:蚂蚁的 C/C++ 标准编程 作者:Bjarne Stroustrup 翻译:antigloss 等级:强烈推荐
发布于2007-02-03 15:53
 

    C++/CLI 是对 ISO C++ 的一组扩展,它将 C++ 和微软的 CLI(通用语言架构 Common Language Infrastructure)极其完整地“捆绑”在一起。它已经通过 ECMA 进行了标准化(ECMA-372)。我很高兴它(C++/CLI)使得 C++ 可以很容易地使用 CLI 的所有特性,也为它远胜于它的前任“托管 C++(Managed C++)”感到欣喜。然而,C++/CLI 为了达到这些目的,却对 C++ 进行了各种语言特性上的扩展,以迎合 CLI 的各种特性(接口、属性、泛型、指针、继承、枚举等很多很多),我对此深表遗憾。这将成为混乱的主要源头。C++/CLI 比 ISO C++ 多出了大量新的语言上的便利,这会诱导程序员(不知不觉地)编写出不可移植的代码,而且这些代码和 MS Windows 却有着亲密接触。

    CLI 提供了一套访问系统设施(facilities)和应用程序的接口,而这套接口却和传统的接口大相径庭。特别是,这套接口的语义不能完全或者便利地用传统的编程语言来表达。一种形容 CLI 的方法是把它当作(局部的)“平台”或者“虚拟机”。它包含一套庞大的语言特性(继承、方法、循环构造 (loop constructs),回调机制 (callback mechanisms) 等),支持一套庞大的基础类库(即 BCL),还有一个精巧的元数据(metadata)系统。CLI 有时也被称为“语言中立者”。然而,如果一种语言不大量引入 CLI 的特性,它甚至不能使用 .NET 的基本设施(或者 MS Windows 将要添加的设施,如果 MS 的计划不变的话)。而且,如果一种语言不能表达所有这些特性,那它就不能应用于这个实作(.NET),因为 .NET 的资源是为其它(支持这些特性的)语言服务的。因此,CLI 是“语言中立者”这种说法是仅仅建立在所有语言为了成为 .NET 上的“一流”,都必须支持 CLI 的所有特性这个基础上的。

    我更希望绑定是通过少数原语(primitive)来完成的,而且这些原语应该能被任何编程语言用简单的函数调用和数据结构来表示,或者把这些原语封装于语言特有的库里。而 CLI 最多只对全盘接受 CLI 设施的语言提供这种支持。为了生成 CLI 模块,编程语言必须能够表达 CLI 的全部特性,包括原数据。只有能做到这些的编程语言才能成为 .NET 的系统编程语言。进而,MS C++ 小组断定,只有内建语言特性才能被用户接受。他们的设计反映出来的思维是:带 C++/CLI 扩展的 C++ 可以使用 CLI 的任何设施;使用 CLI 设施时,(C++/CLI)比其它语言更加简练;和其它语言相比,(C++/CLI)绝无多余花销。他们的目标是使 C++ 成为主流的 Windows 系统编程语言。

    一如既往,我极力强调可移植性,并且建议程序员在设计应用程序时,通过 ISO C++ 中明确定义的那些接口访问系统特定的设施(例如不要直接使用 C++/CLI)。在 Windows 上,这样做有时会比直接使用 C++/CLI 的设施来的麻烦,但这是获取可移植性和降低(平台)销售商依赖度的唯一途径。当然,如果一段代码的目的是为其它代码提供 CLI 接口,那么这种间接使用 CLI 的方法也是难以维护的。请注意,我知道系统特定扩展的必要性,我也知道提供这种扩展的 C++ 销售商并非只有微软,我只是强烈希望这种扩展能通过 ISO C++ 允许的“小巧的接口”来实现。

    如何处理系统特定的扩展是一个固有的难题。微软 C++ 小组,特别是 Herb Sutter,一直都在和 ISO C++ 标准委员会的其他成员讨论这个问题,以期最终理清 ISO C++ 及其超集 C++/CLI 的关系。在 ISO C++ 标准委员会,我们已经作出了许多有建设性的合作。同时,为了避免混淆 ISO C++ 和 C++/CLI 扩展,微软正在修改 VC++ 文档,以期清楚地区分 ISO C++ 和 C++/CLI(单纯写 C++ 即表示 ISO C++)。我希望其他销售商也会跟随这种潮流。

    如何称呼 C++ 的 CLI 绑定/扩展是一个充满争议的难题,我个人倾向于使用 C++/CLI 作为“ISO C++ 的 CLI 扩展”的缩写。在名称中保留 C++ 可以提醒人们(C++/CLI 的)基础语言是什么,并且有助于保持 C++ 为带 C++/CLI 扩展的 C++ 的严格子集。C/C++ 兼容性问题论证了保持子集严格性的重要性。

以下是一些关于C++/CLI的文档:

原文地址:http://www.research.att.com/~bs/bs_faq.html#CppCLI

C++/CLI(四):字符串

C++/CLI字符串(Unicode字符组成的字符串)是指在System命名空间中定义的String类,即由System:Char类型的字符序列组成的字符串。它包含大量强大的功能,使得字符串的处理非常...
  • anenyang
  • anenyang
  • 2011年12月02日 16:08
  • 1031

实例解析C++/CLI的输入与输出

实例解析C++/CLI的输入与输出——有关C++/CLI程序读写的ABC           当使用标准C++编程时,我们已开始接触到两个主要的I/O“工具”:标准C头文件cstdio和标准C++中与...
  • xieqidong
  • xieqidong
  • 2008年04月03日 08:06
  • 884

不可轻浮的看待C++

学习C++很长时间了,也看过很多程序员学习C++的历程。总体来说,C++是一个“双刃剑”式的语言,只有那些熟悉他的人才能把C++这门语言用好。Linus曾说过:“C++是一门很恐怖的语言,而比它更恐怖...
  • qq_35524916
  • qq_35524916
  • 2017年03月28日 18:59
  • 186

《C++/CLI面向对象编程》(郑阿奇)读书笔记

1 C++/CLI标准 由ECMA最早于2003年开始设计,最新版ECMA-372 在2005年11月推出。 2 双关键字 enum calss  enum struct for eac...
  • shellching
  • shellching
  • 2013年01月18日 12:32
  • 4063

C++/CLI全景体验”专栏之《C++/CLI基本类型》

C++/CLI基本类型文/Stanley Lippman   李建忠 导读:本文向大家揭示了在将CLI类型系统和ISO-C++语义框架集成在一起的时候,微软做了哪些调整工作,以及如何在必要的时候调整在...
  • soarwell
  • soarwell
  • 2005年04月23日 22:39
  • 1418

C++:C++/CLI

       CLI 指的是通用语言结构,一种支持动态组件编程模型的多重结构,在许多情况下,这代表了一个与C++对象模型完全颠倒了的模式,一个时实的软件层,有效的执行了系统,在底层操作系统与程序之间运...
  • luqinghua
  • luqinghua
  • 2007年04月04日 10:20
  • 4705

C++/CLI 实战技术收集(我讨厌MFC)

C#和C++是非常相似的两种语言,然而我们却常常将其用于两种不同的地方,C#得益于其简洁的语法和丰富的类库,常用来构建业务系统。C++则具有底层API的访问能力和拔尖的执行效率,往往用于访问底层模块和...
  • wlanye
  • wlanye
  • 2017年07月12日 11:31
  • 666

C++/CLI简介(什么是C++/CLI) -------C++/CLI 编程系列一

要知道C++/CLI是什么,首先知道什么是CLI。 一、CLI简介 CLI:(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所运行需要的虚拟执行环...
  • Eric_Jo
  • Eric_Jo
  • 2009年05月14日 20:19
  • 11579

实例解析C++/CLI之开篇

实例解析C++/CLI之开篇           C++/CLI可以说是标准C++语言一种新的“方言”,它是Microsoft为充分利用CLI(Common Language Infrastructu...
  • xieqidong
  • xieqidong
  • 2008年04月02日 13:17
  • 2959

C++/Cli语言语法总结

Cli语言的部分语法规则: 1、类的声明和引用      引用某个类时,需引用该类所在的空间;      若引用代码和类定义在同一个命名空间,但在不同的文件,则引用类声明的头文件; 2、类的方法   ...
  • songshu5555
  • songshu5555
  • 2014年02月17日 13:24
  • 1539
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:您怎么看待 C++/CLI?
举报原因:
原因补充:

(最多只允许输入30个字)