1. ホーム
  2. c++

[解決済み] C++のIOStreamsを設計したのは誰か、そしてそれは現在の基準でもよく設計されていると言えるか?[クローズド]

2022-06-29 04:37:02

質問

まず、主観的な意見を求めているように見えるかもしれませんが、私が求めているのはそういうことではありません。私はこのトピックについて、根拠のある議論を聞きたいと思っています。


最新のストリーム/シリアライゼーションフレームワークがどのように設計されるべきかについて、いくつかの洞察を得ることを期待しています。 最近、私はこの本のコピーを手に入れました。 標準 C++ IOStreams およびロケール Angelika Langer と Klaus Kreft によるものです。 . もしIOStreamsがうまく設計されていなければ、そもそもC++の標準ライブラリに入ることはなかっただろうと思いました。

この本の様々な部分を読んだ後、IOStreams が全体的なアーキテクチャの観点から例えば STL と比較できるのかどうか、疑問を持ち始めています。例えば、以下を読んでみてください。 Alexander Stepanov (STL の発明者) のインタビューを読んでください。 を読んで、STLに採用されたいくつかの設計上の決定について学んでください。

特に驚いたこと :

  • IOStreamsの全体的なデザインは誰が担当したのか不明なようです(これに関する背景情報を読んでみたいのですが、どなたか良いリソースをご存じでしょうか)。

  • いったん IOStreams の表面的な部分を掘り下げると、たとえば IOStreams を独自のクラスで拡張したい場合、かなり不可解でわかりにくいメンバ関数名を持つインターフェースに行き着きます。 getloc / imbue , uflow / underflow , snextc / sbumpc / sgetc / sgetn , pbase / pptr / epptr (といった具合です(もっとひどい例もあるでしょう)。これでは、全体の設計や各部分の協力関係を理解するのがとても難しくなってしまいます。上で紹介した本でさえ、役に立ちません。 その にはなりません(IMHO)。


したがって、私の質問です。

もしあなたが今日のソフトウェアエンジニアリングの基準で判断しなければならないとしたら、(もし実際に で判断するとしたら、C++ の IOStreams はまだよく設計されているとみなされるでしょうか。 (私は、一般に時代遅れとみなされるものからソフトウェア設計のスキルを向上させたくはありません)。

どのように解決するのですか?

いくつかの思い付きの悪いアイデアが、規格に入り込んでしまったのです。 auto_ptr , vector<bool> , valarrayexport などがあります。ですから、私はIOStreamsの存在を、必ずしも質の高いデザインのしるしとは考えていません。

IOStreams には波瀾万丈の歴史があります。実際には、以前のストリーム ライブラリを作り直したものですが、今日の C++ のイディオムの多くが存在しなかった時代に作成されたため、設計者は後知恵を働かせられませんでした。仮想関数を多用し、細かい単位で内部バッファオブジェクトに転送するため、Cのstdioと同じように効率的にIOStreamsを実装することはほとんど不可能であること、また、ロケールの定義と実装方法における不可解な奇妙さのおかげで、時間が経つにつれ明らかになった問題の1つです。何年か前に comp.lang.c++.moderated で激しい議論の対象になったことを覚えています。