托管扩展 C++ 迁移到 C++/CLI

对于C++/CLI代表 ISO-C++标准语言的一个动态编程泛型扩展在原版语言设计中有许多,我们觉得在修订版语言设计 (V2) 中已经修正了这些弱点,下面进行说明学习研究。。。

本文列举了 V1 版本语言的功能和它们在 V2 版本中的对应功能(如果存在);并指出了其对应功能不存在的构造。对于有兴趣的读者,可以查看附录中提供新语言设计的扩展原理。另外,一个源代码级别的转换工具 (mscfront) 正在开发中,而且可能在 C++/CLI的发布版中提供给希望将 V1 代码自动移植到新语言设计的人。

本文分为五个章节加一个附录。第一节讨论语言关键字的主要问题,特别是双下划线的移除以及与上下文相关和由空格分隔的关键字。第二节着眼于托管类型的变化特别是托管引用类型和数组。还可以在这里找到有关确定性终结语义 (deterministic finalization) 的详细讨论。关于类成员的变化,例如属性、索引属性和操作符,是第三节的重点。第四节着眼于 CLI 枚举、内部和钉住指针的语法变化。它也讨论了许多可观的语义变化,例如隐式装箱的引入、CLI枚举的变化,和对类中默认构造函数的支持的移除。第五节有点像大杂烩乱七八糟的杂项。讨论了类型转换符号、字符串字符的行为和参数数组

1. 语言关键字

原版到修订版语言设计的一个重要转换是在所有关键字中去掉双下划线。举例来说,一个属性现在被声明为 property而不是 __property。在原版语言设计中使用双下划线前缀的两个主要原因是:

1.

这是提供符合 ISO-C++标准的本地扩展的一致性方法。原版语言设计的一个主要目标就是不引入与标准语言的不兼容性,例如新的关键字和标记。这个原因很大程度上也推动了对声明托管引用类型的对象的指针语法的选择。

2.

双下划线的使用,除了兼容性方面的原因之外,也是一个不会对有旧代码基础的用户造成影响的合理保证。这是原版语言设计的第二主要目标。

这样的话,为什么我们移除双下划线(并且引入了一些新的标记)?不是的,这并不代表我们不再考虑和标准保持一致!

我们继续致力于和标准一致。尽管如此,我们意识到对 CLI动态对象模型的支持表现出了一种全新的强大的编程范型。我们在原版语言设计上的经验以及设计与发展 C++ 语言本身的经验使我们确信,对这个新范型的支持需要它自己的高级关键字和标记。我们想提供一个该新范型的一流表达方式,整合它并且支持标准语言。我们希望您会感受到修订版语言设计提供了对这两种截然不同的对象模型的一流的编程体验。

类似的,我们很关心最小化这些新的关键字的对现有代码可能造成的冲击。这是用与上下文相关和由空格分隔的关键字来解决的。在我们着眼于实际语言语法的修订之前,让我们试试搞清楚这两个特别关键字的特点。

相关推荐