C++0x设计之路(2)
2008-03-28 07:32:54来源: 阅读 ()
C++对于常规特性(主要就是类)的突出强调是它的主要威力。
对一些特定的功能的要求和对一些符号表达进行改进是非常常见的改革建议。可就算这些建议真地能够成为标准,也并不会给大家带来多少快乐。毕竟,如果一项特性只不过是针对一个特定问题的直截了当的解决方案的话,那么它通常和系统的其他部分并没有多大联系,它会非常容易解释,实现起来也不会有太大困难,并且针对一些精心挑选的代码,它可以有逻辑上最小的表现形式。那些喜欢拿语言做比较的人就经常使用一些这样子的功能清单。这种观点的问题是,我们所需要面对的问题在本质上是无穷尽的,这就要求我们提供一个无穷尽的功能集合。Pascal中的过程参数和C#中的委托机制就是一个明显的例子。与之不同的是,C++(在之前是K&R C)的传统做法一般是提供一些通用的特性集合,让优秀的程序员能够对很大一部分的问题构造解决方案。指针和类的概念就是明证。
C++对于通用特性的的强调已经成为其最具威力的方面;而同时,由此带来的在某些特定功能(例如“属性”和线程)上的缺乏也已被认为是C++最薄弱的环节。很显然,这两个观点都是正确的。不过,我们仍然要对那些能提供更有力的抽象手段的的通用特性给予强烈的关注;C++社群的多样性决定了这一点。如果要为某些特定领域——例如Windows程序或者嵌入式系统程序——提供一些精心剪裁的特殊的功能,而这些功能又仅能为它们所特定的领域服务的话,那这些功能将会是一个承重的负担。C++0x不会成为一门“Windows语言”,或者“web语言”,当然更不可能是“嵌入式语言”。它将是一门通过一些公用的基础设施来支持所有这些领域——而且范围更大——的通用型语言。
对通用机制的偏爱,一个很重要的原因就是这种机制通常可以为那些现在还完全意料不到的问题提供解决方案,而特殊机制则做不到这一点。可以肯定的是,未来肯定会有一些令人措手不及的变故发生。我可不希望一门语言只能表达那些在它的设计阶段就已经明确指定 的领域。
让C++变得更加通用的一个很明显的可改进点就是为范型编程提供更好的支持以及更灵活的初始化/构造机制(示例中有进一步解释)。另一个明显的可改进点就是在并行、并发、分布式计算越来越普及的今天,为它们提供某种支持。种种不同的途径和技术表明了不存在一种单独的机制可以覆盖所有类型的应用。因此,一种明显的做法就是提供一些很简单的语言机制并且与程序库(利用范型和面向对象技术构建)相配合。
总结:C++0x的目标是提供通用型的语言机制,这些机制可以自由组合,并针对某些特定的领域提供构建于这些通用机制之上的标准程序库。
专家和新手
C++有一种转变为“专家专用”的语言的趋势。而在专家群(个人组合或者是通过网络组合)中,对于如何帮助新手,则很难建立广泛的共识,有时甚至对此无人问津。一个典型而普遍的观点(在这样的群体里)是:帮助新人最好的办法就是让他成为专家。可问题是,成为专家需要花费大量的时间,而大多数人在这个过程中,还必须进行一些实际的工作,并被要求保持一定的工作效率。更有趣的是,很多C++的新手对于成为C++的专家毫无兴趣。如果你是一个物理学家,只是碰巧需要做一些计算性的工作;或者是一名商务人员,只不过因工作需要要接触一些软件上的事务;甚或还是一个正在学习程序设计的学生,你只希望学习那些能让你完成工作的语言设施。你并不想成为语言专家——你只希望在你自己的领域内成为专家,并且了解一些能让你完成工作的语言特性就可以了。在有合适的程序库的支持下,C++可以做到这一点——而且它也的确被这样广泛使用。当然,这样做会有陷阱,会有缺陷,并且传统的教育手段给这种C++的“临时使用”增添了不必要的困难度。而利用一些最新的工作成果,C++0x可以在这个上面做得更好。
请考虑一些极其平凡的例子。你曾经写过这样的或者类似的代码吗?
vector<vector<double>> v;
或者:
int i = extract_int(s); // s is a string, e.g. "12.37"
或者:
vector<int>::iterator p = find(tbl.begin(),tbl.end(),x); // tbl is a const vector<int>
如果你从未写过类似的代码,那我想你要么是以另外一种同样有自己问题的方式来使用C++,要么就是你很少使用C++。允许>>符号作为两个模板参数的终结符可以解决第一个问题;为string提供一个标准的数值解析操作可以让新人们免去查找形如extract_int()这样的函数定义之苦;而第三个问题的解决方案,则是让p的类型能够由其初始化形式自动推导得出,就像下面这样:
auto p = find(tbl.begin(),tbl.end(),x);
// tbl is a const vector<int>
// p becomes a vector<int>::const_iterator
可以证明,上述的>>和auto这两个解决方案是符合C++0x的原则的。而为“任何程度的新手”提供帮助,则要求语言本身和标准库共同努力。并且对教育的关注将会是核心议题;相关讨论,可以参考[4]。
而根据concepts的重载(请参考示例部分),则可以得到一个更为简洁的的方案:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++ 0x 里的垃圾收集器
下一篇: Visual C 设计UDP协议通讯示例
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
