C++的未来,以及未来的未来
<chsdate year="2007" month="7" day="15" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">7</span><span style="font-family: 宋体;">月</span><span lang="EN-US">15</span><span style="font-family: 宋体;">日</span></chsdate>-20日,标准委员会在Toronto开了一次会,IBM做的东。从会后的文档来看,除了把一些已经基本成熟的提案加入草案,进一步明确了打算C++0x的新特性,以及留到再下一版本的C++标准的提案。从中我们可以清晰地看到C++未来,以及未来的未来的发展趋势。文档“State of C++ Evolution”(http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2007/n2336.html)包含了最新的发展情况。本文便是基于这篇文档。
首先,是一个清单,包含已经投票通过,合并到working paper的提案。从编程技术的角度来讲,比较主要的内容包括:
A Proposal to Add an Rvalue Reference to the C++ Language
Template aliases for C++
Variadic Templates
Delegating Constructors
Decltype
Rvalue Reference为C++提供了检测右值引用的能力,使C++具备了move语义和完美转发。(详见http://blog.csdn.net/pongba/archive/2007/07/10/1684519.aspx和http://blog.csdn.net/pongba/archive/2007/07/18/1697636.aspx)。
Template aliases完善了C++的别名体系:
template<typename T>
using MyVector=vector<T, allocator<T>>;
Vec<int> v; // same as vector<int, Alloc<int>> v;
使我们可以更灵活地创建类型别名。非常有用。(真想立刻得到它,我急等着用呢)。
Variadic Template则进步更大。提供了可变的模板类型参数,也就是说,同一个模板的参数的数量是可变的:
template<typename T, unsigned PrimaryDimension, unsigned... Dimensions>
class array { /* implementation */ };
array<double, 3, 3> rotation_matrix; // 3x3 rotation matrix
array<double, 3, 3, 3> 3d_array; //3x3x3 array
Variadic Template使得我们可以拥有真正任意结构的tuple,类型安全的printf()等崭新的基础设施。
Delegating Constructors使我们可以“复用”一个“基本”的构造函数:
class X {
int i_;
public:
X( int i ) : i_(i) { }
X() : X(42) { } // “复用”X(int i)
};
这个新特性可以大幅减少构造函数上的重复代码,提高效率。
Decltype可以使我们提取一个表达式的类型:
int a=1; float b=2;
typedef decltype(a+b) result_t;
typedef decltype(string::c_str) cstr_t;
其他还有一些非常有用的特性,诸如static_assert、Generalized Constant Expressions等都非常实用,只是不如上述几大特性影响大。
接下来是一大堆正在审查的提案。分成了7大部分:
Voting at next meeting。下次会议打算投票表决的提案。目前只有一个Universal Character Names in Literals。
Proposed wording under review in Core。正在核心语言小组(标准委员会的一个小组,负责核心语言特性相关提案的审查)中审查的提案。这些提案都已经有的wording,并都在做最终的详细审查。比较出名的包括:
<!--[if !supportLists]-->1. <!--[endif]-->A name for the null pointer: nullptr;C++终于可以不需要再用0来代表null指针了。
<!--[if !supportLists]-->2. <!--[endif]-->Initializer lists;一种通用的初始化列表(即{1,2,3,4,5})方案,扩展到了几乎所有类型。
<!--[if !supportLists]-->3. <!--[endif]-->Explicit Conversion Operators;类型转换操作符是个麻烦制造者,主要因为它是默认implicit转换的。现在,可以为它加上explicit关键字,迫使其必须执行explicit转换。就像explicit constructor一样。
<!--[if !supportLists]-->4. <!--[endif]-->Inheriting Constructors;可以直接复用基类的构造函数了。通过using default关键字。
<!--[if !supportLists]-->5. <!--[endif]-->Proposal for new for-loop;想要foreach关键字的人可以满意了,只是依旧使用for关键字:for(int& a : array){…}。
<!--[if !supportLists]-->6. <!--[endif]-->Sequencing and the concurrency memory model;C++在并发上是够糟糕的,现在大牛们正在给标准做透析呢。
<!--[if !supportLists]-->7. <!--[endif]-->以及期盼已久的Concept;已经有很多的文章写concept了。不清楚的请看http://blog.csdn.net/pongba/archive/2007/08/04/1726031.aspx。
Blessed by evolution - wording available for initial review by Core。提案完整的wording已经有了,也提交核心小组。但核心小组还没有深入地研究。比较重要的包括:
<!--[if !supportLists]-->1. <!--[endif]-->Thread-Local Storage;并发编程中非常重要的特性。C++自然不应该落下。
<!--[if !supportLists]-->2. <!--[endif]-->Member Initializers;可以在类声明中直接为一个成员赋值,相当于默认初始化。很可爱的一个特性。
<!--[if !supportLists]-->3. <!--[endif]-->General Attributes for C++;attribute,用.net的人肯定很熟悉。挺有用的特性,不知标准委员会的那帮死脑筋怎么看。
Core issues addressed by specific papers。核心语言的一些问题,大到值得写一整篇paper了。目前只有一个Syntactic Disambiguation Using the Template Keyword
Active topics in Evolution。这些提案正在审查,有明确的意向将其加入下一版标准。都是重量级的提案:
<!--[if !supportLists]-->1. <!--[endif]-->Transparent Garbage Collection for C++;GC就不用说了吧。人人想要,但又四处挨骂的特性。不过请放心,C++的GC是可选的,而且性能优先。想了解大概,请看http://blog.csdn.net/g9yuayon/archive/2007/07/23/1702694.aspx。
<!--[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已经够先进的了,也应该回过头来,还上一些陈年旧账了。
分享到:
相关推荐
这个安装包的核心是Visual C++ 2010学习版的离线包,以及一系列的复习资料。 Visual C++ 2010是一款由微软开发的集成开发环境(IDE),特别适合初学者学习C++。它提供了代码编辑器、调试器以及用于构建Windows应用...
《C++之父Bjarne谈C++的未来发展》一文深入探讨了C++语言及其标准库的发展方向,尤其关注于解决现有标准中的一些缺陷,以及如何更好地支持泛型编程和初学者。以下是对该文章核心观点的详细解析: ### 泛型编程的...
在“云大C++实验以及实验报告”这个...总之,云大C++实验和实验报告的实践过程,旨在使学生掌握C++语言的核心知识,并通过实际操作提升编程技能,培养独立解决问题和文档撰写的能力,为未来的职业生涯打下坚实的基础。
1.熟悉Visual C++集成开发环境。 2.掌握结构化程序设计的方法,具有良好的程序设计风格。 3.掌握程序设计中简单的数据结构和算法并能阅读简单的程序。 4.在Visual C++集成环境下,能够编写简单的C 程序,并...
### 定制C++的未来:在CMake中设置C++标准全指南 #### CMake简介与重要性 CMake是一种流行的跨平台自动化构建系统,主要用于C++项目的构建。通过编写`CMakeLists.txt`配置文件,用户可以自定义构建规则、配置选项...
6. "2__C++概述-编写第一个C++程序.mp4":这是入门级别的内容,通常会介绍C++环境的搭建,以及如何编写并运行第一个"Hello, World!"程序。 7. "32__函数-return语句.mp4":return语句用于从函数中返回一个值。了解...
C++是一种强大的、通用的编程语言,被广泛应用于软件开发、系统编程以及游戏制作等多个领域。这个名为"C++实验以及实验报告"的压缩包显然包含了与C++学习相关的材料,特别是针对初学者或正在学习C++的学生。这些资料...
2. **面向对象编程**:C++的核心是面向对象编程,课件可能会讲解类与对象的概念,封装、继承和多态的原理,以及如何通过面向对象的设计模式来解决问题。 3. **模板和泛型编程**:C++的模板允许我们编写泛型代码,...
**C++编程语言详解** C++是一种通用的、面向对象的编程语言,由Bjarne Stroustrup在C语言的基础上...通过深入学习,不仅可以掌握C++语言本身,还能理解面向对象编程的思想,为未来在软件开发领域的工作打下坚实基础。
c++ 编成必备,学好c++ 掌握未来
通过阅读和理解代码,开发者可以深入学习如何组织程序结构,如何使用面向对象编程(OOP)原则来设计类和对象,以及如何实现复杂的算法。比如,游戏中的角色、场景、物体可能都会被抽象为类,而游戏状态管理、时间...
五、C++的发展和未来 C++不断演进,新的标准如C++11、C++14、C++17、C++20引入了许多现代化的特性,如自动类型推导、右值引用、lambda表达式、并发编程支持等,旨在提高开发效率和代码质量。未来,C++将致力于提供...
【南开大学C++课件】是一份针对学习C++编程语言的重要资源,它涵盖了C++的基础知识、高级特性以及编程实践。这份课件旨在帮助学生深入理解和掌握C++这门强大而灵活的编程语言,为未来的软件开发或学术研究打下坚实...
《C++ How to Program》是C++编程领域的一本经典教材,由保罗·戴特尔(Paul Deitel)和哈维·戴特尔(Harvey Deitel)共同编写,提供...通过深入阅读和实践,你将能够熟练掌握C++语言,为未来的职业生涯打下坚实基础。
本文将深入探讨C++调用Web服务的原理、方法以及相关的技术细节。 1. Web服务基础 Web服务基于SOAP(Simple Object Access Protocol)协议,通过HTTP或HTTPS协议传输XML格式的数据。WSDL(Web Services Description...
总的来说,《C++大学教程(第9版)C++ How to Program 9E 源码》是一套全面的C++学习资源,结合书中的理论讲解和Code_Examples中的实践操作,能够帮助读者系统地掌握C++编程,为未来的软件开发职业生涯打下坚实的基础...
C++是一种广泛应用于系统软件、应用软件、游戏开发、嵌入式系统以及各种复杂软件工程的语言,由Bjarne ...通过本书的学习,你不仅能掌握C++的基础,还能建立起解决实际问题的能力,为未来的软件开发奠定坚实的基础。