首先,我似乎在征求主观意见,但这不是我所追求的。我很想听听关于这个话题的一些有根据的论点。
为了深入了解应该如何设计现代流/序列化框架, 我最近得到 了 Angelika Langer 和 Klaus Kreft 所著的 Standard C++ IOStreams and Locales 一书的副本。我想,如果 IOStreams 设计得不好,它一开始就不会进入 C++ 标准库。
在阅读了本书的各个部分之后,我开始怀疑 IOStreams 是否可以从整体架构的角度与 STL 进行比较。例如,阅读 对 Alexander Stepanov(STL 的“发明者”)的采访, 了解进入 STL 的一些设计决策。
特别令我惊讶的是:
似乎不知道谁负责 IOStreams 的整体设计(我很想阅读一些关于此的背景信息——有人知道好的资源吗?);
一旦深入了解 IOStreams 的直接表面,例如,如果你想用自己的类扩展 IOStreams,你就会得到一个具有相当神秘和令人困惑的成员函数名称的接口,例如
getloc
/imbue
,uflow
/underflow
,snextc
/sbumpc
/sgetc
/sgetn
,pbase
/pptr
/epptr
(可能还有更糟糕的例子)。这使得理解整体设计以及单个部件如何协作变得更加困难。即使我上面提到的 那 本书也没有太大帮助(恕我直言)。
因此我的问题是:
如果您必须按照当今的软件工程标准来判断(如果实际上对这些标准 有 任何普遍共识),那么 C++ 的 IOStreams 是否仍然被认为是精心设计的? (我不想从通常被认为过时的东西中提高我的软件设计技能。)
原文由 stakx - no longer contributing 发布,翻译遵循 CC BY-SA 4.0 许可协议
Several ill-conceived ideas found their way into the standard:
auto_ptr
,vector<bool>
,valarray
andexport
, just to name a few.所以我不会将 IOStreams 的存在视为质量设计的标志。IOStreams 有一个曲折的历史。它们实际上是对早期流库的改造,但是是在当今许多 C++ 习语不存在的时候创作的,因此设计者没有后见之明的好处。一个问题随着时间的推移才变得明显,几乎不可能像 C 的 stdio 那样高效地实现 IOStreams,因为大量使用了虚函数并以最精细的粒度转发到内部缓冲区对象,而且还由于一些难以理解的陌生性在定义和实现语言环境的方式上。我承认,我对此的记忆很模糊;我记得它是几年前在 comp.lang.c++.moderated 上激烈辩论的主题。