AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > C++

C++的明天——以及明天的明天

51自学网 2015-09-06 http://www.51zixue.net

 

  Active topics in Evolution。这些提案正在审查,有明确的意向将其加入下一版标准。都是重量级的提案:

  <!--[if !supportLists]-->1. <!--[endif]-->Transparent Garbage Collection for C++;GC就不用说了吧。人人想要,但又四处挨骂的特性。不过请放心,C++的GC是可选的,而且性能优先。

  <!--[if !supportLists]-->2. <!--[endif]-->Optimization-robust finalization;有了GC,自然需要finalization,这个提案也必不可少。

  <!--[if !supportLists]-->3. <!--[endif]-->Lambda expressions and closures for C++;另一个可爱的特性,C#3.0已经有了。boost的那个替代品终于可以退休了。

  Active topics in Concurrency sub-group。正在并发小组里最终审查的提案。并发看来是最头大的问题了,所以标准委员会专门成立了一个Concurrency sub-group,来啃这块硬骨头。包括:Dynamic initialization and concurrency;C++ Data-Dependency Ordering;Non-Memory Actions;Object Aliasing and Threads。

  Active topics in both Concurrency and Library sub-groups。并发小组和库小组一同审查的提案。包括:Atomic operations with multi-threaded environments;Proposed Text for Parallel Task Execution;Thread Pools and Futures;A Multi-threading Library for Standard C++。

  从这些Active的提案中可以看到,下个版本标准的进步主要集中在三大方面:

  <!--[if !supportLists]-->1. <!--[endif]-->扩展编程技术,强化泛型编程的能力,诸如concept、Variadic Templates、Template aliases、auto、Decltype等;

  <!--[if !supportLists]-->2. <!--[endif]-->强化传统的技术,简化和方便编程,包括GC、rvalue reference、Delegating Constructors、Initializer lists等;

  <!--[if !supportLists]-->3. <!--[endif]-->并发。没有并发的语言,将无法在21世纪生存。

  这些内容表明,目前C++的进化主要集中在编程技术的发展上。已经加入和打算加入标准草案的特性,都大大地拓展了C++原本已经非常强大的编程机制。届时,C++将会再一次站在编程技术的前沿。

  接着的两个大类包含了以上这些提案的背景论文和发展过程中产生的提案。对历史感兴趣的可以研究研究。

  再下来,是两个同样吸引人的大类。都是在C++0x之后的标准中可能会引入的提案,也就是“未来的未来”。

  Heading for a separate TR。包含了打算在C++0x之后的TR(也就是C++0x sp1)中包含的提案。这些提案都不错,只是这次来不及了,等下次吧:

  <!--[if !supportLists]-->1. <!--[endif]-->Decimal Types for C++。decimal没什么好说的,C++在这方面还是缺那么一点的。毕竟应用摆在那里。

  <!--[if !supportLists]-->2. <!--[endif]-->Modules in C++。C++缺少Modules,时常遭人诟病。想想也是,Ada83就有了Module,其他很多语言都有,C++缺了如此重要的东西,是该骂。

  Not ready for C++0x, but open to resubmit in future。这些提案肯定赶不上C++0x了。有的因为来不及,有的因为缺少足够的动机。但不管怎么说,这些提案还是很有价值的,所以标准委员会把它们放在将来考虑。让我比较感兴趣的包括:

  <!--[if !supportLists]-->1. <!--[endif]-->PME: Properties, methods and events;属性、方法和事件是比较时髦的语言特性。不过说实话,个人觉得除了property外,其他两个都没有什么实际意义。method和member function是一回事。event完全可以通过库实现,比如boost::signal。property则无法通过模拟实现。(我曾经试过,但不好使)。

  <!--[if !supportLists]-->2. <!--[endif]-->Draft Proposal for Dynamic Libraries in C++;动态链接库对于不同项目,甚至不同语言,共享组件有无可比拟的作用。不过要实现这些特性,需要C++有更统一的编译模型和对象模型。怎么把那些浑身是刺的编译器厂商捏在一块儿,是个比较艰巨的工作。何况还有模板的问题。

  <!--[if !supportLists]-->3. <!--[endif]-->Draft proposal for adding Multimethods to C++;multimethod十几年前就已经想加入标准,到现在还只是一个提案。唉。

  <!--[if !supportLists]-->4. <!--[endif]-->Reflection in C++;反射也是时髦货,可以提供更完全的类型信息。是个好东西。

  <!--[if !supportLists]-->5. <!--[endif]-->Expliciting default parameters;旨在进一步简化函数默认值的使用。但为什么不再加上命名参数呢?

  <!--[if !supportLists]-->6. <!--[endif]-->Contract Programming For C++0x;Contract Programming可以个时鲜货,搞好了可以大大提高软件开发的质量和效率。不过目前还只是理论上多些。

  <!--[if !supportLists]-->7. <!--[endif]-->Macro scopes;macro不受命名域的限制,很讨厌吧。(比如MFC里的max/min宏)。应该给它们加上一道紧箍咒。

  <!--[if !supportLists]-->8. <!--[endif]-->Overloading Operator.() & Operator.*();关于这个问题,D&E里已经有过探讨,不知为什么还会有这样的提案。

  <!--[if !supportLists]-->9. <!--[endif]-->Toward Opaque typedefs in C++0X;typedef是弱类型的,仅仅是类型的别名,无法参与重载。有一个“强类型”的typedef也是件很不错的事。(Matthew Wilson在Imperfect C++中费了不小的力气模拟了这种机制)。

  <!--[if !supportLists]-->10. <!--[endif]-->Toward a Proposal for Object Templates in C++0x;让对象也模板化,很有创意,当然也有实际需求。不知道这种比较“另类”的提案最终会怎么样。

  可以看出,在未来的未来,人们对C++的要求从扩展和强化编程技术,回到增强语言的交互能力上。其中最主要的是module、dll和reflection。其他基本上就是对C++的一些修修补补。

  当然,也可能在C++0x出台之后,石破天惊,冒出一些新的技术来,就像concept那样。不过总体上而言,C++0x已经够先进的了,也应该回过头来,还上一些陈年旧账了。

 
 

上一篇:Vista后,C++&nbsp;Builder&nbsp;2007托管还是原生?  下一篇:缓冲区溢出原理浅析以及防护