C ++で数値ソフトウェアを書く際のデザインパターン


13

私は数値ソフトウェアの設計パターンと原則に関するリソースを探していますが、必ずしも必要ではありませんが、数値コードに対するオブジェクト指向のアプローチに焦点を当てています。

私は「科学ソフトウェアを書く:良いスタイルのためのガイド」というテキストを知っていますが、これはまだ浮動小数点の問題、最適化の方法とタイミングなどを扱っています。

アルゴリズムなどを扱うものではなく、数値コードの設計の全体像に関する情報を探しています。

このためのリソースがあることを願っています。特に、C ++の良いイディオムと実践に関する自分の知識を除いて、物事を正しく設計するためのガイドがないので、ライブラリを次から次へと進むだけではありません。

(これは言語固有ではありませんが、言語固有のコンテンツがある場合は、C ++を好むでしょう。)


そのような本を書くことをよく考えました。しかし、可能なアプローチの範囲は膨大であり(また、主要な数値手法+問題領域に強く依存します)、必要なものは百科事典のようなものです。また、一人一人がすべての可能性を把握することはできません。ハードウェアの開発を念頭に置いて、従来のソフトウェアプラクティスに従う場合にできる最善の方法。あなたのテクニックと興味のある分野は何ですか?
ビスワジットバネルジー

2
完全にターゲットになっていないもう1つの有用なリファレンスは、Anthony ScopatzとKathryn Huffによる「Effective Computation in Physics」です。
ブライアンボーチャーズ

@BrianBorchers Hm、その半分はPythonの紹介にあり、開発ツールに焦点を当てているようです。
user1997744

回答:


8

20年に渡って数値ソフトウェアを開発してきましたが、おそらく、ギャングオブフォー(Book of the Gang of Four(ここを参照)で。結局のところ、数値ソフトウェアも大規模で複雑なソフトウェアであるため、他のソフトウェアと同じ設計上の考慮事項が適用されることは驚くことではないでしょう。

もちろん、数値アルゴリズムに固有のケースは数多くありますが(例えば、こちらを参照)、「伝統的な」デザインパターンのセットを知っていることは、本当に良い出発点です。


さらに、新しいハードウェアでの数値計算では、ポインター追跡(Gang of Fourパターンの多くが使用している)を最小限に抑えるよう努力する必要があります。C ++設計の出発点としては、github.com
isocpp /

@BiswajitBanerjeeはい、C ++コアガイドラインは、現代のC ++を使用するための基本的な知識です。ハーブサッターの編集者の一人であり、あなたは彼のアドバイスをいつでも信用できます。
user1997744

@ user1997744 Bjarneのことですか?ハーブサッターは、書き込み専用コードにつながる「常に自動」のアイデアでも有名です(私がどれだけ彼の判断を信頼するかはわかりません)。また、C ++コアガイドラインは基本的な知識とはほど遠いものです。びっくりするでしょう。
ビスワジットバネルジー

@BiswajitBanerjeeそうでない場合、開発者がガイドラインの大部分に慣れておらず、それらを使用していない場合は、単一のインタビュー以上に開発者を進ませることはできないと言えます(レガシーコードが扱いにくい場合を除く)。
user1997744

6

私はこれをお勧めしますMatthew G Knepley 科学計算用のプログラミング言語。arXivプレプリントarXiv:1209.1711、2012( https://arxiv.org/pdf/1209.1711.pdf

また、三角形、PETSc、MoAB、deal.II、fenicsなど、他のコードを調べて読むことをお勧めします。すべてのソリューションが機能するわけではありませんが、最終的には、他の人(経験豊富な開発者と成功したコード)からの対処と学習が、コードの設計方法の最良のレッスンです。

さらに、既存のプロジェクトに参加して、貢献者または開発者になることをお勧めします。何か新しいことを始めるのが好きな場合もありますが、それを行うには確固とした議論が必要です。


何か新しいことを始めるための私の議論は、それからの学習体験と達成感です:)
user1997744

1
私はこの議論を理解しています。私はずっと前に同じことをしていました。今は時期尚早だったと思う。最初は同じ間違いをしなければならないかもしれません。最初に歩く方法を学ぶために、あなたは落ちる必要があります。独自のコードを作成する場合、これが初めての場合は、コードの唯一のユーザーになる可能性が非常に高くなります。コミュニティが開発したコードに貢献すると、あなたの作品はおそらく他の人によって使用され、達成感と感謝の気持ちが得られます。プルリクエストでコメント/レビューを受け取り、そこからスキルを学び、向上させます。
リカスク

まあ、私がしなければならない超特定の難解な計算のためのライブラリはないので、最終的に私は実際に自分で書く必要がありますが、もちろんすべてを再発明する必要はありません。
user1997744

既存のオープンソースプロジェクトに参加するための素晴らしいアドバイス。私はプログラマのネットワークに引き込ましまったのことを行うことによって、より良い私より。
user14717
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.