C++0x的工作已经进入了一个决定性的阶段。ISO C++委员会对C++0x的目标是使其成为“C++09”。这意味着我们要在2008年完成这个标准以便被ISO成员国批准。最后提交的标准设施将选自目前正被讨论的那些提案。为了按时完成此项工作,委员会已经停止审查新的提案并将精力集中于目前已经被讨论的那些提案上。
本文简要描述了C++0x标准化工作的指导原则,展示了一些可能的语言扩展的例子,并列出了一些被提议的新标准库设施。
指导原则
C++是一门偏向于
系统编程的通用编程语言。它
·是一个更好的C
·支持数据抽象
·支持面向对象编程
·支持泛型编程
当我说“
系统编程”时,我是指传统上与操作
系统以及基础工具有关的那一类编程任务。包括操作
系统核心、设备驱动程序、
系统工具、网络应用、字处理工具、编译器、某些图形和GUI应用、数据库
系统、
游戏引擎、CAD/CAM、电信
系统,等等。这类工作在当前的C++用户中占有主导地位。例子参见我的个人主页“Applications”单元(http://www.research.att.com/~bs/applications.html)。
C++0x的目标是使以上的说法仍然成立。它并不是要消除这些编程风格(styles)(或“paradigms”,范型)之一(比方说,使C++不那么兼容于C),或者添加一种全新的“范型”。最有效的编程风格是联合使用这些技术,这也就是我们常说的“多范型编程(multi-paradigm programming)”。因此,我们可以说我们希望改进C++使其成为一门更好的多范型编程语言。
C++0x的高级目标是:
使C++成为一门更好的
系统编程语言和构建库的语言。
- 而不是为特定子社群提供专用设施(例如数值计算或Windows风格的应用程序开发)。
使C++更易于教和学。
- 通过增强的一致性、更强的保证以及针对新手的设施支持。
换句话说,在C++98已经很强的领域(以及一些更多的、C++98支持的较为自然的、一般化的领域),C++0x应该比C++98做得更好。对于一些专有的应用程序领域来说,例如数值计算、Windows风格的应用程序开发、嵌入式
系统编程,C++0x应该依赖于程序库。C++在基本语言特性(如基于栈的对象和指针)方面所具有的效率,和在抽象机制 (如类和模板) 方面所具有的通用性和灵活性,使得程序库在非常广泛的应用领域都能保持它的吸引力,也因此降低了C++对各种新的语言特性的需求。
我们不能为了降低C++在教与学方面的难度,而去移除某些语言特性。保持C++稳定性与兼容性是我们主要的考虑。因此,不管是以什么方式来移除其中任何重要的特性都是行不通的(而移除其中不重要的特性对于解决问题又没有实质性的帮助)。那么留给我们的选择恐怕只有“将规则一般化”和“添加更易于使用的特性”。两者都是我们的目标,但是后者更容易一些。例如,更好的程序库(容器与算法)可以帮助用户避免一些底层设施(例如数组与指针)带来的问题。那些能够“简化程序库的定义和应用”的语言设施(例如“concepts”与“通用初始化器列表”,下面将会谈到它们)也将有助于改善C++0x的易用性。
一些人可能对此持有反对意见,“不要为了新手而将C++降格,适合新手的语言已经有很多了!”,或者“最好的办法还是将新手变成专家!”这些人的观点并非毫无道理,但是现实是新手总比专家要多。而且许多C++用户完全不必、也没有意愿成为C++专家——他们是各自领域的专家(比如物理学家、图形学专家、硬件工程师),只不过他们需要使用C++。在我个人来看,C++已经太过“专家友好”了,我们完全可以在花费很少的情况下为“新手们”提供更好的支持。事实上,这种支持不会损及任何C++代码的性能(零成本原则依旧适用)、灵活性(我们不打算禁止任何东西)、与简洁度。相反,我们的目标是简化这些理念的表达。最后,值得指出的是,C++是如此之大,而且应用如此广泛,各种设计技巧可谓汗牛充栋,以至于我们很多时候也都是“新手”。
C++0x的改进应该以这样的方式进行:结果所得语言应该更易于学和用。以下是委员会考虑的一些规则:
·提供稳定性和兼容性(针对C++98而言,可能的话还有C)
·优先考虑库设施,其次才是语言扩展

发表评论