C ++ ile sayısal yazılım yazarken tasarım kalıpları


13

Tasarım kalıpları ve ilkeleri ile ilgili kaynaklar arıyorumSayısal yazılımlar için , ancak sayısal kodlara yönelik nesne yönelimli yaklaşımlara odaklanmıyorum.

Ben metnin farkındayım Yazma Bilimsel Yazılım: İyi Stil için bir kılavuz , ancak bu hala kayan nokta sorunları, nasıl ve ne zaman optimize edileceği vb.

Büyük resim hakkında bilgi arıyorum algoritmalar ve benzeri ile ilgili bir şey değil, sayısal kodlar tasarım .

Bunun için kaynaklar olduğunu umuyorum ve biri sadece kütüphaneden sonra kütüphaneye gitmeye bırakılmıyor, özellikle de C ++'daki iyi deyimler ve uygulamalar hakkındaki kendi bilgim dışında, doğru bir şekilde akıllıca tasarım yapan şeyler hakkında bir rehber olmadığından.

(Bu dile özgü değildir, ancak dile özgü herhangi bir içerik varsa, C ++ 'ı tercih ederim.)


Sık sık böyle bir kitap yazmayı düşündüm; ancak olası yaklaşımların çeşitliliği çok büyüktür (ve büyük ölçüde birincil sayısal tekniğe + sorun alanına bağlıdır) ve ihtiyaç duyulan şey daha çok bir ansiklopedi gibidir. Ayrıca, hiçbir kişi tüm olasılıkları kavrayamaz. Donanım geliştirmelerini göz önünde bulundurarak geleneksel yazılım uygulamalarını takip ederseniz yapabileceğiniz en iyi şey. İlginiz ve ilgi alanınız nedir?
Biswajit Banerjee

2
Hedefi tam olarak hedeflemeyen bir diğer yararlı referans ise Anthony Scopatz ve Kathryn Huff tarafından yazılan "Fizikte Etkili Hesaplama" dır.
Brian Borchers

@BrianBorchers Hm, bunun yarısı Python'a girişte ve daha sonra geliştirme araçlarına odaklanıyor gibi görünüyor.
user1997744

Yanıtlar:


8

20 yıldır sayısal yazılım geliştirdikten sonra, muhtemelen Kitapta Dörtlü Çete tarafından açıklanan tasarım modellerinin çoğunu kullandığımızı görüyorum ( buraya bakın ). Günün sonunda, sayısal yazılım sadece büyük ölçekli, karmaşık bir yazılımdır, bu nedenle diğer yazılımlarda olduğu gibi aynı tasarım hususlarının geçerli olması şaşırtıcı olmayabilir.

Tabii ki, gerçekten sayısal algoritmalara özgü (örneğin, buraya bakın ) bir dizi durum vardır, ancak "geleneksel" tasarım desenleri setini bilmek zaten iyi bir başlangıçtır.


Daha yeni bir donanımdaki sayısal hesaplamalar için, işaretçi kovalamayı en aza indirmek için çaba göstermelidir (Gang of Four desenlerinin çoğunun kullandığı). C ++ tasarımları için iyi bir başlangıç ​​noktası github.com/isocpp/CppCoreGuidelines/blob/master/…
Biswajit Banerjee

@BiswajitBanerjee Evet, C ++ temel yönergeleri modern C ++ kullanımına yönelik herkes için temel bilgidir. Herb Sutter'ın editörlerinden biri ve onun tavsiyesine her zaman güvenebilirsiniz.
user1997744

Bunu mu demek istediniz: Bjarne Herb Sutter, sadece yazma koduna yol açan "her zaman otomatik" fikriyle de ünlüdür (kararına ne kadar güveneceğimi bilmiyorum). Ayrıca, C ++ temel yönergeleri temel bilgilerden uzaktır. Şaşıracaksınız.
Biswajit Banerjee

@BiswajitBanerjee Eh, eğer değillerse, bir kılavuzun çoğunu bilmiyorlarsa ve bunları kullanmıyorlarsa, bir geliştiricinin tek bir röportajın ötesine geçmesine asla izin vermeyeceğimi söyleyebilirim (eski kodun bu işi zorlaştırabileceği durumlar hariç).
user1997744

6

Bu Matthew G Knepley'i tavsiye ederim. Bilimsel hesaplama için programlama dilleri. arXiv ön baskı arXiv: 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )

Ayrıca üçgen, PETSc, MoAB, deal.II, fenics ve diğerleri gibi diğer kodlara bakmanızı ve okumanızı tavsiye ederim. Tüm çözümler sizin için işe yaramaz, ancak sonunda, başkalarından başa çıkmak ve öğrenmek (deneyimli geliştiriciler ve başarılı kodlar), kodun nasıl tasarlanacağı konusunda en iyi derstir.

Dahası, mevcut bir projeye katılmak ve katkıda bulunan veya geliştirici olmak için daha iyi olduğunu düşünüyorum. Bazen yeni bir şeye başlamak ister, ama bunu yapmak için sağlam argümanlara sahip olmanız gerekir.


Yeni bir şey başlatmak için benim argüman ondan öğrenme deneyimi ve başarı duygusu :)
user1997744

1
Bu argümanı anlıyorum. Aynı şeyi uzun zaman önce yapmıştım. Şimdi erken olduğunu düşünüyorum. Başlangıçta hepimiz aynı hataları yapmak zorunda olabiliriz. Önce nasıl yürümeyi öğrenmek için düşmelisin. Kendi kodunuzu yazıyorsanız, bu ilk kez geliyorsa, büyük olasılıkla kodunuzun tek kullanıcısı olacaksınız. Topluluğun geliştirdiği koda katkıda bulunan, çalışmanız muhtemelen başkaları tarafından kullanılacaktır ve bu size başarı ve takdir duygusu verecektir. Çekme talebinde yorum / inceleme alacaksınız, bundan sonra becerilerinizi öğrenecek ve geliştireceksiniz.
likask

Yapmam gereken ultra spesifik ezoterik bir hesaplama için kütüphane yok, bu yüzden sonunda her şeyi yeniden keşfetmeye gerek kalmadan aslında kendimi yazmak zorundayım.
user1997744

Açık kaynak kodlu mevcut bir projeye katılmanız için harika tavsiyeler. Ben programcılar ağı içine çekti var arada o yaparak daha iyi benden daha.
user14717
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.