[阅读: 1261] 2005-11-29 04:18:28
通用性与特殊化
对特殊功能和在符号方面的小改进的请求是很常见的. 如果提供了这些功能, 基本上总是能获得掌声的. 尤其是当一个特征能够直接解决某个问题, 没有明显地与别的功能产生影响的话, 容易解释, 一般都容易实现, 特别是可以用一些简单的代码来表达它的逻辑的时候. 那些使用列表来比较语言特征的人们最喜欢这样子的特征. 问题是我们面对的问题基本上是无穷无尽的, 因此我们就会需要无穷无尽的这种特殊化的特征. Pascal 的过程参数和 C# 的 delegate 就是这样的例子. 传统上 C++ 的选择 (或者在此之前的 K&R C ) 是提供非常通用特征, 通过这些特征一个好的程序员能够针对很大范围的问题构造出相应的解决方案. 比如指针和类.
C++ 对通用的特征 (特别是类) 的强调已经成为其主要的力量, 同时它对特殊特性 (比如 "属性" 和线程) 的缺乏已经被视为其主要弱点. 显然, 两方面的评析可以都是正确的. 尽管如此, 我们必须集中在那些以有效的抽象为目标的特性上, 因为巨大而多样化的 C++ 社区需要它. 那些为比如 Windows 应用构建或者嵌入式系统编程而定制的特殊特性, 如果只能完成那些特殊的工作的话, 会变成一个巨大的负担. C++0x 不会是一个 "Windows 语言" 或者一个 "Web 语言" 或者甚至一个 "嵌入式语言". 它会是一个通用化的语言, 使用一个公共的功能集来支持那些应用的领域 - 以及更多.
偏向于通用的机制而不是为当前的特殊问题而特殊化的解决方案的一个重要独院因是通用的机制通常很可能对没有考虑到的问题也有帮助: 它们为将来令人讨厌的意外提供了保险. 我不想要一个语言只能表达那些我特地为之设计的东西.
通过对 genetric programming 和更灵活的初始化/构造机制的支持 (见例子一节), C++ 能够显而易见地在通用性上取得更大的增强. 另外 随着各种形式的并发, 并行和分布式编程变得越来越普遍, 对并发的某种程度的支持显然也是需要的. 这些方法和技术的多样性使得单一的机制不再能够适用于所有的引用. 因此, 一种明显的方法是提供非常简单的语言机制并由库 (建立 generic 的和面向对象的技术) 来支持.
总结一下: C++0x 的目标是提供通用的语言机制. 这种机制能够被自由地组合出更多的特殊的特性, 比如建立在到处可用的语言特性上的标准库.