哪些东西应该出现在标准库里?一种思想是,程序员应该能在库里找到所有有意思的、重
要的并具有合理普遍性的类、函数、模板等。然而,这里的问题并不是“什么东西应该出
现在某个库里?”而是“什么东西应该出现在标准库里?”说“所有的东西!”是对前一
问题的合理的一阶逼近,但却不是对后一个问题的回答。标准库应该是某种每个实现者都
必须提供的,以至于每个程序员都可以依靠的东西。
C++标准库:
[1]提供了对一些语言特征的支持,例如,对于存储管理和运行时信息的支持。
[2]提供了有关实现所确定的语言方面的一些信息,例如最大的float值。
[3]提供了那些无法在每个系统上由语言本身做出最优实现的函数,如sqrt()和memmove()等。
[4]提供了一些非基本的功能,使程序员可以为可移植而依靠它们,例如表,映射、排序函数和I/O流。
[5]提供了一个为扩展它所提供功能的基本框架。例如,使用户可以按照内部类型I/O的风格为用户定义类型提供I/O机制的规则和支持功能。
[6]为其他库提供了一个公共的基础。
此外,标准库还提供了少量的功能,例如随机数生成器,简单说,就是因为做这些事情很方便,而且也很有用。
这个库的设计主要是由它所扮演的后三种角色所主导,这些角色都是密切相关的。例如,可移植性是对任何特殊的库都适用的一种重要设计准则;而公共容器类型,例如表和映射,又是分别开发的库之间提供方便通信的基础。
从设计的角度看,这里的最后一个角色特别重要,因为它帮助划定了标准库的边界,对它的功能提出了约束。例如,标准库提供了串和表的功能,如果它们不在这里,分别开发的库就只能利用内部类型相互通信。然而,这里就没有提供模式匹配和图形功能,这些功能很明确,使用也非常广泛,但是它们却很少涉足于分别开发的库之间的通信。
除非对于支持这些角色而言,一种功能在某种意义下是必需的,否则就可以将它们留给标准库之外的某些库。无论是好是坏,将某些东西留给标准之外,也给那些针对某一思想提出相互竞争的具体实现的库提供了一个机会。
评论