web-dev-qa-db-ja.com

「大規模C ++ソフトウェア設計」に対するあなたの考え

Amazonでのレビュー および [〜#〜] accu [〜#〜] を読むと、ジョンラコスの本Large-Scale C++ソフトウェアデザインは、モジュール化のためのロゼッタストーンかもしれません。

同時に、この本は本当に珍しいようです。多くの人がこれを読んだことはなく、海賊版の電子コピーは広がっていません。

それで、あなたはどう思いますか?

42
mlvljr

私はそれを読み、大規模なC++プロジェクトのいくつかの実用的な問題に関する非常に役立つ本だと考えています。 C++についてすでに多くを読んでいて、物理的な設計とその影響について少し知っている場合は、この本でひどく「新しい」ものをあまり見つけられない可能性があります。

一方、ビルドに4時間かかり、ビルドの方法を知らない場合は、コピーを取得し、それを読んで、すべてを取り込んでください。

物理的に優れたコードをすぐに書き始めるでしょう。

[編集]どこかから始めたくて、すぐに本を手に入れられない場合、私は Games From Withinシリーズの物理構造 が大規模C++の設計を読んだ後でも役立つことがわかりました。

37

興味深いことに、 "More C++ Gems" には、Lakosの本の短縮版(88(!)ページ)が含まれています。書籍) Googleブックのオンライン

だから、興味のあるすべての人を楽しんでください:)

18
mlvljr

Lakosは、EDAソフトウェアを作成するMentor Graphicsで働いていました。彼はC++でEDAソフトウェアの構築に携わっていました。彼らはC++を効率的に使用し(「Cコードのオーバーヘッドは5%以下」)、コンパイルに長い時間がかかる初期のワークステーションでソフトウェアを構築する方法を整理しました。大規模なC++アプリケーション。

この本はとても読みやすいです-それは多種多様なトピックについて議論していて、ラコスは本当に彼のことを知っていました。彼は本当に、C++コンパイラーから効率的なコードを取得しなければならない背景と、C++プログラムをセットアップして保守可能にし、コンパイルとリンクを適度に迅速に行う方法に由来しています。

ラコスにはたくさんの洞察があると思いますので、ぜひ読んでいただきたいと思います。ただし、これはテンプレートなどの機能が広く利用できるようになる前のC++です。私のコピーは販売されていません; ^)

この本は1990年代後半によく読んだものだと思いました。当時は古く、1950年代の電話帳と同じくらい関連性がありました。

私はLakosと数年間働き、そこで彼はこれらのアイデアを実装しようとしました。また、約2000のソースファイルで構築した最新のC++プロジェクトもありました。ビルド時間は、アイスクリームのようなプログラムを使用して、並列分散ビルドによって簡単に削減されます。すべてのコンパイラーは開いたヘッダーをキャッシュします-sconsのような最新のビルドツールを本当にとんでもないことをするだけで、何も特別なことをせずに何千もの翻訳単位にスケーリングします。テストを含むビルド時間は、クリーンから数分かかります。

ライブラリインターフェイスをいくつかの「語彙タイプ」に制限する(OOの概念と同じ意味ではない、彼は単にInt、float、string、char、および私が使用しない他のカップルを使用することを意味する) tリコール)は、何かをスケーリングするための非常に貧弱なアドバイスです。ビルドは型の不一致を探すことになるため、makeファイルの書き込みを簡単にするためだけに、実行時にこれを望まないでしょう。

そしてそれは主に本の要点です-1993年のツールで動作するようにC++をどのように書くのですか?さらに、本が説明するメンターグラフィックプロジェクトは、すべてのアカウントからの災難でした。本自体でさえそれをほのめかしています。

ラージスケールC++はソースコードの形式で提供されます。これらはリンクライブラリではなく、「物理的な依存関係」です(そして、本では他のより重要な依存関係について言及していませんデータベース、ソケット、プロセッサアーキテクチャなど)。

この本はいい音でいっぱいですが、実際にはスケールアップするためのより良い方法があります。大規模なC++ライブラリを調べたい場合は、 Boost または Xerces を調べて、それらの動作を確認してください。彼らは実際にそれらについて書くのではなく、大規模なプロジェクトを実装しています。

11
Lance Diduck

それは少し時代遅れです(実際に書かれたときは時代遅れでした)。私が正しく思い出すと、多くの場合、おそらくテンプレートを使用して実行する依存関係を減らすことに関するものでした。

これはおそらく大規模プロジェクトで学ぶべき教訓の1つですが、通常は最先端の機能やツールを使用していません。

5
Martin Beckett

John Lakosによる「大規模C++ソフトウェアデザイン」は、心を刺激する(しかし、通常は見過ごされている)宝石ですか

はい

4
Robert Grant

優れた本であり、歴史的にも重要な一冊です。

本で説明されているプラ​​クティスを実装するには、チーム内でかなりの規律と同意が必要であることに注意してください。注意すべき点がいくつかあります。

  1. Lakosは、彼が「コンポーネント」と「パッケージ」と呼ぶものについて正確な定義を持っています。これらは大規模設計の鍵となります。ただし、ソースファイルとヘッダーファイルの命名規則、およびそれらが含まれる順序の規則を遵守する必要があります。ほとんどの人(ラコスを引用する人を含む)がこれらの慣例に従うことはほとんどないのは残念です。

  2. 本はすべてC++についてですが、概念はより広く適用できます。ただし、C++は非常に複雑な言語であるため、本の大部分はC++を効果的に使用する方法を説明しています。それを乗り越えることができれば、他の言語を使用していても、実際に役立つことがわかります。

  3. 「名前空間」の使用などのいくつかの処方箋は、現在、物議を醸していると考えられている。多くの人は、C++では名前空間を限られた方法で使用するべきだと考えています。

4
Neeraj Sangal

はい、ある意味で、この本は少し古く、一部はC++固有のものです。それにもかかわらず、それは大規模なプログラムでの複雑性と結合の扱いについて多くの有用なアドバイスを提供し、彼のアドバイスのほとんどはあらゆるオブジェクト指向言語に適用されます。また、とても読みやすかったです。

あなたがコピーを追跡することができるなら、私はあなたがそれが読む価値があるとわかると確信しています。それは私のプログラミングブックのトップ10リストにあります。

4

私はずっと前にそれを読みましたが、私はそれからかなり多くを得たことを覚えています。 MadKeithVが指摘しているように、私が知っていたのはそれよりも少ないかもしれません;)

確かに、「これを構築するのにかかる時間を短縮するにはどうすればよいですか」の観点から、特にコンパイル時間の依存関係を減らすことに関して、多くの有用な要素があります。最近。

そして、いいえ、あなたも私のコピーを持つことはできません:)

3
Len Holgate