Apa yang akan Anda katakan akan menjadi keuntungan / kerugian dari dua pendekatan untuk pengkodean perpustakaan umum (volume terbatas, fem, dg) untuk Computational Continuum Mechanics? Ini adalah bagaimana saya melihat sesuatu sekarang, jadi tolong berikan pengalaman Anda sendiri dan jangan nyalakan saya untuk saya :):
1) C ++:
pemrograman generik, fungsi virtual, kelebihan beban, kecepatan ...: semua alat + OOP genre yang tersedia untuk membangun apa pun yang Anda inginkan
perpustakaan tingkat rendah tersedia sebagian besar (tidak ada penyebaran ilmu luas & pengembangan perpustakaan rekayasa seperti yang untuk Python)
2) Pembungkus Python + untuk komputasi paralel (pyOpenCL dan lainnya)
sejumlah besar lib pendukung dari berbagai jenis
kode apa yang Anda pikirkan: implementasi dilakukan dengan sangat cepat
waktu eksekusi lebih lambat
Jika Anda ingin membuat kode kerangka kerja yang akan mendukung berbagai metode, bekerja dengan geometri dan masalah yang kompleks, apa yang akan Anda pilih dan mengapa?
sumber
Jawaban:
Saya akan bertujuan untuk mendapatkan yang terbaik dari kedua dunia dan kode "antarmuka pengguna" (yaitu, kerangka fungsi yang akan memanggil pengguna perpustakaan Anda untuk menggambarkan geometri dan sifat-sifat lain dari masalah) di Python untuk mendapatkan yang cepat waktu penyelesaian, kemudian tulis waktu menjalankan simulasi dalam C ++.
Bahkan, saya mungkin akan mengejek bahkan simulasi waktu berjalan di Python pertama, kemudian menggantinya dengan kode C ++ sepotong demi sepotong. Akhirnya, Anda dapat mempertimbangkan memiliki kode Python Anda menghasilkan sumber C ++, untuk dikompilasi dan ditautkan ke runtime Anda secara online, sehingga simulasi yang sebenarnya tidak perlu memanggil ke Python sama sekali - hanya mengembalikan hasil pada akhirnya. Yang menyenangkan tentang pengaturan ini adalah bahwa ia pada dasarnya gesit: Anda mulai dengan solusi kerja tercepat dan termudah, Anda akan mengetahui dengan cepat apa yang berhasil dan tidak berfungsi, dan begitu Anda memiliki sesuatu yang Anda sukai, Anda dapat mulai mempercepatnya.
(Ini adalah cara kerja pemecah ODE / DAE Maple, kecuali menggunakan Maple bukan Python. Pengungkapan penuh: Saya bekerja untuk mereka.)
sumber
Anda juga dapat menggunakan Cython untuk algoritme Anda. Ini pada dasarnya adalah Python dengan menambahkan informasi jenis untuk beberapa variabel yang harus "cepat". Ini menerjemahkan kode Python ke kode C, yang selanjutnya dapat dikompilasi oleh kompiler C favorit Anda. Penambahan informasi jenis ini dengan hati-hati dapat membuat kode Anda hingga 150 kali lebih cepat daripada kode Python yang naif.
sumber
Saya pikir ada lebih banyak pertanyaan ini. Pertama dan terutama seorang pengembang biasanya akan lebih suka apa yang ia kenal kecuali jika ada keuntungan yang signifikan (misalnya dalam produktivitas, waktu pengembangan dan alat). Secara pribadi, saya mengutamakan produktif (waktu biasanya adalah sumber daya yang paling langka!) Dan ini mendukung pilihan yang dekat dengan basis pengalaman saya.
Mungkin juga relevan untuk diperhitungkan
3) Waktu pengembangan
4) Pemeliharaan
5) Masalah perizinan
6) Faktor Produktivitas dan Kegembiraan (sering diabaikan!)
sumber
Ini tergantung apakah kode Anda dapat ditulis sebagai:
atau lebih tepatnya harus ditulis seperti ini:
Dalam kasus pertama pilih apa yang paling Anda sukai untuk dikodekan; dalam kasus kedua tidak menggunakan bahasa scripting atau bersiap untuk menderita karena waktu eksekusi.
sumber
Sebagai jawaban wajar bagi Allan (bahwa waktu pengembang Anda sendiri adalah sumber daya paling berharga): Gunakan apa yang sudah dilakukan orang lain. Anda mengatakan bahwa Anda ingin mengembangkan perpustakaan untuk mekanika kontinum komputasional tetapi sudah ada beberapa yang begitu besar sehingga mereka hampir selalu sudah memiliki semua yang Anda butuhkan. Lihatlah deal.II misalnya untuk segala sesuatu yang dapat ditulis sebagai masalah elemen hingga, OpenFOAM untuk dinamika fluida, atau PyCLAW / CLAWPACK untuk masalah hiperbolik. deal.II, misalnya, meminta Anda untuk memprogram dalam C ++ tetapi pada kenyataannya tingkat pemrograman seringkali sangat tinggi sehingga orang bisa mengatakan itu seperti bahasa khusus domain untuk kode FEM menggunakan sintaksis C ++.
sumber