2 sen saya.
Saya pikir lebih mudah untuk menulis secara umum tentang ini, daripada hanya tentang C / C ++. Pertama, perpustakaan dalam bahasa seperti Python tidak selalu digunakan untuk mendapatkan manfaat kecepatan, bahkan jika itu konsekuensinya. Saya pikir
@David membahas alasannya dengan cukup baik.
Mengambilnya dari atas, implementasi bahasa sampai batas tertentu menentukan perpustakaan apa yang Anda punya akses. Bahasa yang umum digunakan dalam ilmu komputasi termasuk C, C ++, Python, Perl, Java, Fortran, dan R. Contoh yang kurang umum mungkin Ocaml dan Common Lisp. Sekarang, karena sebagian besar bahasa ini ditulis dalam C, mereka memiliki antarmuka fungsi asing alami ke C. Namun, tidak begitu mudah untuk memanggil, katakanlah, perpustakaan Perl dari Python atau sebaliknya. Jadi dalam praktiknya orang cenderung juga
Gunakan perpustakaan yang ditulis dalam bahasa implementasi mereka, biasanya sesuatu yang merupakan bagian dari perpustakaan standar, atau tersedia secara luas, atau
Panggil perpustakaan C / C ++ melalui bahasa FFI. Ini mengasumsikan bahwa pembungkus belum ada, karena jika tidak, itu tidak mudah dibedakan dari (1).
(2) biasanya lebih sulit, karena Anda harus membungkus sendiri fungsi C / C ++. Anda juga harus mem-bundle pustaka, atau menambahkan ketergantungan tambahan. Untuk alasan itu, orang lebih cenderung menggunakan perpustakaan bahasa builtin daripada menggunakan GSL misalnya, yang ada di C.
Untuk rutinitas yang sangat umum, katakanlah menghasilkan sampel acak dari distribusi, atau rutinitas numerik dasar seperti kuadrature integral, mudah dan umum untuk menggunakan kembali beberapa perpustakaan. Ketika fungsi yang coba diimplementasikan menjadi lebih kompleks, secara eksponensial menjadi semakin tidak mungkin bahwa seseorang akan menemukan fungsi persis yang diinginkan di pustaka lain, dan bahkan yang dilakukan, seseorang dapat menghabiskan banyak waktu mencari dan akhirnya mengadaptasi fungsi sebagai diperlukan (gaya kode / desain bisa menjadi masalah misalnya). Dan seperti yang dibahas di atas, seseorang hanya memiliki akses ke sebagian perpustakaan di luar sana. Di sisi lain, mengimplementasikan algoritma sendiri jika kompleks dan bukan fokus utama dapat menjadi sesuatu yang menakutkan, dan tentu saja kita harus berurusan dengan masalah kecepatan sial itu.
Jadi, ini menjadi masalah optimasi dalam analisis biaya / manfaat. Pengalaman saya adalah bahwa bahkan untuk teknik-teknik standar komparatif seperti MCMC, saya biasanya berakhir dengan menulis kode saya sendiri, karena lebih cocok dengan bagaimana saya merancang perangkat lunak secara keseluruhan.
Tentu saja, bahkan jika Anda akhirnya tidak menggunakan kode tersebut, dimungkinkan untuk belajar dari kode orang lain. Saya tidak tahu seberapa sering para ilmuwan benar-benar repot untuk melakukan ini. Kesan saya adalah bahwa membaca kode orang lain untuk dipelajari lebih merupakan masalah insinyur perangkat lunak.