谁架构/设计了 C 的 IOStreams,按照今天的标准,它仍然被认为是精心设计的吗?

新手上路,请多包涵

首先,我似乎在征求主观意见,但这不是我所追求的。我很想听听关于这个话题的一些有根据的论点。


为了深入了解应该如何设计现代流/序列化框架, 我最近得到 了 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 许可协议

阅读 527
2 个回答

Several ill-conceived ideas found their way into the standard: auto_ptr , vector<bool> , valarray and export , just to name a few.所以我不会将 IOStreams 的存在视为质量设计的标志。

IOStreams 有一个曲折的历史。它们实际上是对早期流库的改造,但是是在当今许多 C++ 习语不存在的时候创作的,因此设计者没有后见之明的好处。一个问题随着时间的推移才变得明显,几乎不可能像 C 的 stdio 那样高效地实现 IOStreams,因为大量使用了虚函数并以最精细的粒度转发到内部缓冲区对象,而且还由于一些难以理解的陌生性在定义和实现语言环境的方式上。我承认,我对此的记忆很模糊;我记得它是几年前在 comp.lang.c++.moderated 上激烈辩论的主题。

原文由 Marcelo Cantos 发布,翻译遵循 CC BY-SA 2.5 许可协议

关于谁设计了它们,最初的库(毫不奇怪)是由 Bjarne Stroustrup 创建的,然后由 Dave Presotto 重新实现。然后,Jerry Schwarz 使用 Andrew Koenig 的操纵器概念为 Cfront 2.0 重新设计和重新实现了这一点。该库的标准版本基于此实现。

来源“C++ 的设计与演变”,第 8.3.1 节。

原文由 anon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题