测试实现与正式标准

C++/CLI中的CLI是Common Language Infrastructure,即通用语言基础结构。Ecma第39技术委员会的第5任务组于2003年10月成立,标准编写在同年12月启动。标准前言把微软首次广泛分发测试实现的时间记为2004年7月;封面则标明正式第一版为2005年12月。两者分别是程序可供测试与标准定稿的阶段。

参考:[1]

围绕旧代码重新设计

微软Visual C++架构师Herb Sutter在2003年的技术说明中,把旧有Managed C++的问题归结为衔接不自然:同一种指针写法随类型改变含义,模板、析构和托管类型之间也存在隔阂。新的方案要让程序员继续使用C++经验,同时直接使用CLI功能,减少移植程序时的手工接线。

这项工作也进入跨机构标准化。Sutter列出的参与者包括Dinkumware和Plum Hall;Tom Plum任召集人,Rex Jaeschke任项目编辑。共同制定规则的一项实际目标,是让独立实现能够互相协作。

参考:[2]

同期的Visual Studio测试公告

2004年6月29日,微软在阿姆斯特丹的TechEd Europe大会宣布发布Visual Studio 2005 Beta 1供测试评估,并说明将向微软开发者网络订户分发,随后提供网上获取途径。与此同时,公开的产品反馈中心让开发者报告错误、查看已知问题、追踪建议,并与产品团队交流。这份6月29日的公告确定的是Visual Studio Beta 1的发布声明日期。

参考:[3]

属性如何改变一次赋值

2004年2月,Edison Design Group的Daveed Vandevoorde向C++标准工作组说明了属性语法。下面是依据其早期规则编写的示例,不是当年的产品源代码:

struct Meter { private: int stored; public: property int Reading { int get() { return stored; } void set(int value) { stored = value < 0 ? 0 : value; } } }; int main() { Meter m; m.Reading = -3; return m.Reading; }

给m.Reading赋值−3时,实际执行set,把stored设为0;随后读取Reading调用get,main返回0。属性因此可以在保留字段式写法的同时控制赋值。文书还说明,图形界面工具可在运行时发现控件属性,再借访问函数更新界面。这是当时设计规则的演示,未以早期编译器实跑。

参考:[4]

运行环境带来的边界

C++创始人Bjarne Stroustrup在2007年的计算史论文中,把C++/CLI放在微软.NET环境的需求下考察:跨语言提供或使用组件,必须生成或接收描述类型的元数据。扩展因而不仅增加几个关键字,还涉及对象模型、垃圾回收、属性和事件。

他认为新方案比早期Managed C++更完整,也提醒使用者:大量依赖这些扩展的程序,会依赖相应的微软运行基础设施。若要保留跨平台能力,系统相关部分需要封装。这一评价说明,连接既有C++程序与.NET组件的便利,同时伴随着明确的运行环境选择。

参考:[5]