C 的未来之路:C 0x概览

2008-02-23 05:24:13来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

 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)

  ·优先考虑库设施,其次才是语言扩展

  ·只进行能够改变人们思考方式的修改

  ·优先考虑一般性而非专用性

  ·同时为专家和新手提供支持

  ·增强类型安全性(通过为当前不安全的设施提供安全的替代品)

  ·改进直接处理硬件的性能和能力

  ·适应现实世界

  当然,对这些思想和规则的应用和其说是一门科学不如说是一门艺术,人们对于什么才是C 的自然发展连同什么才是一种新的范型有着不同的意见。C 0x将极有可能支持可选的垃圾收集机制,并将以一个机器模型外加支持线程的标准库设施(可能更有别的)来支持并发编程。一些人也许认为这过于激进,但我并不这么认为:人们已在C 中(在垃圾收集有意义的领域)使用垃圾收集很多年了,而且几乎每一个人都曾使用过线程。在这些情况下,我们需要做的但是是将现行的实践加以标准化而已。

  我们之所以专注于“只进行能够改变人们思考方式的修改”,是因为这种方式能够使我们的努力获得最大的回报。每一项改变都有代价,不管是在实现方面、还是在学习等其他方面。而且,每项改变的代价并不总是直接和其带来的回报正相关。语言上的主要进步/收益并非体现在如何改进程式员编写的某一行代码上,而是体现在如何改进程式员解决问题和组织程式的方式上。面向对象程式设计和泛型程式设计改变了很多人的思考方式——这也是C 语言设施支持这些风格的目的。因此,作为语言和程式库的设计者来说,最好的做法就是把我们的时间投入到那些能够帮助人们改变思考方式的设施和技巧上。

  请注意最后一条规则“适应现实世界”。一如既往,C 的目标不是创建一门“最美丽”的语言(尽管只要有可能我们都希望“美丽”),而是提供最有用的语言。这就意味着兼容性、性能、易于学习,连同和其他系统和语言的互操作性,才是应该严肃考虑的问题。

  语言特性

  让我们来看看使用C 0x新特性的代码的可能模样:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: C 的救赎 C 开源程式库评话

下一篇: C 多态技术的实现和反思