用C ++编写数值软件的设计模式


13

我正在寻找有关数字软件的设计模式和原理的资源,可能但不一定集中于面向对象的数字代码方法。

我知道《写作科学软件:良好风格指南》一文,但这仍然涉及浮点问题,如何以及何时进行优化等问题。

我正在寻找的信息大局观的设计数字代码,而不是任何与算法等的交易。

我希望有足够的资源来解决这个问题,并且不要让一个库一个库地遍历每个库,特别是因为除了我自己对C ++好的习惯用法和实践的了解之外,没有关于如何正确设计事物的指南。

(这不是特定于语言的,但是如果有任何特定于语言的内容,我希望使用C ++。)


我经常想到写这本书。但是可能的方法范围非常广泛(并且在很大程度上取决于主要的数值技术和问题域),并且所需的方法更像是一本百科全书。同样,没有一个人可以掌握所有可能性。如果遵循传统的软件实践并牢记硬件开发,那是最好的选择。您的技术和兴趣领域是什么?
Biswajit Banerjee

2
另一个不太有用的有用参考是Anthony Scopatz和Kathryn Huff撰写的“物理学中的有效计算”。
Brian Borchers

@BrianBorchers嗯,似乎其中一半是关于Python的介绍,然后重点介绍了开发工具。
user1997744

Answers:


8

我已经开发了数字软件20年,我发现我们可能已经使用了《四人帮》(本书)中描述的大多数设计模式(请参见此处)。归根结底,数值软件也只是大规模,复杂的软件,因此与其他软件一样的设计考虑因素可能并不奇怪。

当然,确实有很多情况是数字算法所特有的(例如,请参阅此处),但是了解“传统”设计模式集确实是一个不错的开始。


我想补充一点,对于在较新的硬件上进行数值计算的人,应努力最小化指针追逐(许多“四人一组”模式使用的指针追逐)。用于C ++设计一个良好的起点是github.com/isocpp/CppCoreGuidelines/blob/master/...
Biswajit纳吉

@BiswajitBanerjee是的,C ++核心准则是现代C ++使用的任何人的基本知识。赫伯·萨特(Herb Sutter)的编辑之一,您始终可以相信他的建议。
user1997744 '17

@ user1997744您的意思是Bjarne吗?赫伯·萨特(Herb Sutter)也以他的“永远自动”的想法而闻名,这种想法导致只写代码(不确定我对他的判断有多信任)。而且,C ++核心准则远非基础知识。您会感到惊讶。
Biswajit Banerjee

@BiswajitBanerjee好吧,如果不是,我可以说,如果他们不熟悉大多数准则和使用准则(不包括遗留代码可能会棘手的地方),我绝不会让开发人员超越一次采访。
user1997744 '17

6

我推荐这个Matthew G Knepley。科学计算的编程语言。arXiv预印本arXiv:1209.1711,2012(https://arxiv.org/pdf/1209.1711.pdf

我还建议您查看和阅读其他代码,例如,三角形,PETSc,MoAB,deal.II,fenics等。并非所有解决方案都对您有用,但最后,应对和学习他人(经验丰富的开发人员和成功的代码)是如何设计代码的最佳课程。

而且,我认为加入现有项目并成为贡献者或开发者更好。有时您想开始一些新的事情,但是您必须有扎实的论据才能做到这一点。


我的观点是,开始新的事物是从中学习经验和成就感:)
user1997744

1
我明白这个说法。我很久以前做过同样的事情。现在我认为还为时过早。可能一开始我们就要犯同样的错误。要学习如何首先走路,您必须跌倒。编写自己的代码,如果这是第一次,那么您很可能是代码的唯一用户。为社区开发的代码做出贡献,您的工作可能会被他人使用,这将使您获得成就感和赞赏。在请求请求时,您将收到评论/评论,从中您将学习并提高技能。
likask

嗯,没有我需要做的用于超特定深奥计算的库,因此最后我实际上不得不编写自己的库,尽管当然没有必要重新发明一切。
user1997744 '17

加入开源现有项目的绝妙建议。我被拉到的程序员网络方式通过这样做,比我好。
user14717 '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.