Moje 2 centy.
Myślę, że łatwiej o tym pisać ogólnie niż o C / C ++. Po pierwsze, biblioteki w językach takich jak Python niekoniecznie są wykorzystywane do uzyskania korzyści w zakresie prędkości, nawet jeśli jest to konsekwencją. Myślę, że
@David całkiem dobrze przedstawił przyczyny.
Biorąc to z góry, implementacja języka w pewnym stopniu decyduje o tym, do jakich bibliotek masz dostęp. Do najczęściej używanych języków w informatyce należą C, C ++, Python, Perl, Java, Fortran i R. Mniej powszechnymi przykładami mogą być Ocaml i Common Lisp. Ponieważ większość tych języków jest napisanych w C, mają naturalny interfejs funkcji obcych do C. Jednak nie jest tak łatwo wywołać, powiedzmy, bibliotekę Perl z Pythona lub odwrotnie. Więc w praktyce ludzie mają taką tendencję
Użyj biblioteki napisanej w języku implementacyjnym, zwykle coś, co jest częścią standardowych bibliotek lub w inny sposób powszechnie dostępne, lub
Wywołaj bibliotekę C / C ++ za pomocą języków FFI. Zakłada się, że opakowanie nie istnieje, ponieważ jeśli tak, nie można go łatwo odróżnić od (1).
(2) jest zwykle trudniejszy, ponieważ musisz sam zawinąć funkcję C / C ++. Ponadto musisz albo spakować bibliotekę, albo dodać dodatkową zależność. Z tego powodu ludzie częściej używają wbudowanych bibliotek językowych niż GSL, na przykład w C.
W przypadku bardzo ogólnych procedur, na przykład generowania losowych próbek z rozkładów, lub podstawowych procedur numerycznych, takich jak kwadratura całek, ponowne i proste użycie części biblioteki jest łatwe i powszechne. W miarę jak funkcjonalność, którą próbujemy wdrożyć, staje się bardziej złożona, staje się wykładniczo bardziej mało prawdopodobne, aby znaleźć dokładną funkcję, której pragnie w innej bibliotece, a nawet tak, można poświęcić dużo czasu na wyszukiwanie i wreszcie dostosowanie funkcji jako konieczne (styl / projekt kodu może na przykład stanowić problem). Jak wspomniano powyżej, można uzyskać dostęp tylko do podzbioru bibliotek. Z drugiej strony, wdrażanie samego algorytmu, jeśli jest on złożony, a nie jest głównym celem, może być zniechęcające i oczywiście trzeba poradzić sobie z tymi nieznośnymi problemami z szybkością.
Staje się to zatem problemem optymalizacji w analizie kosztów i korzyści. Z mojego doświadczenia wynika, że nawet w przypadku stosunkowo standardowych technik, takich jak MCMC, zwykle kończę pisanie własnego kodu, ponieważ lepiej pasuje do tego, jak projektuję całe oprogramowanie.
Oczywiście, nawet jeśli nie użyjesz kodu, możesz uczyć się z kodu innej osoby. Nie wiem jednak, jak często naukowcy tak często to robią. Mam wrażenie, że czytanie kodu innych osób, aby się uczyć, jest raczej inżynierem oprogramowania.