[解決済み] C++のIOStreamsを設計したのは誰か、そしてそれは現在の基準でもよく設計されていると言えるか?[クローズド]
質問
まず、主観的な意見を求めているように見えるかもしれませんが、私が求めているのはそういうことではありません。私はこのトピックについて、根拠のある議論を聞きたいと思っています。
最新のストリーム/シリアライゼーションフレームワークがどのように設計されるべきかについて、いくつかの洞察を得ることを期待しています。 最近、私はこの本のコピーを手に入れました。 標準 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>
,
valarray
と
export
などがあります。ですから、私はIOStreamsの存在を、必ずしも質の高いデザインのしるしとは考えていません。
IOStreams には波瀾万丈の歴史があります。実際には、以前のストリーム ライブラリを作り直したものですが、今日の C++ のイディオムの多くが存在しなかった時代に作成されたため、設計者は後知恵を働かせられませんでした。仮想関数を多用し、細かい単位で内部バッファオブジェクトに転送するため、Cのstdioと同じように効率的にIOStreamsを実装することはほとんど不可能であること、また、ロケールの定義と実装方法における不可解な奇妙さのおかげで、時間が経つにつれ明らかになった問題の1つです。何年か前に comp.lang.c++.moderated で激しい議論の対象になったことを覚えています。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】浮動小数点数の乱数生成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)