Meine 2 Cent.
Ich denke, es ist einfacher, allgemein darüber zu schreiben, als nur über C / C ++. Erstens werden Bibliotheken in Sprachen wie Python nicht unbedingt verwendet, um einen Geschwindigkeitsvorteil zu erzielen, auch wenn dies eine Konsequenz ist. Ich denke,
@David hat die Gründe ziemlich gut dargelegt .
Von oben betrachtet, bestimmt die Sprachimplementierung in gewissem Maße, auf welche Bibliotheken Sie zugreifen können. Zu den in der Computerwissenschaft am häufigsten verwendeten Sprachen gehören C, C ++, Python, Perl, Java, Fortran und R. Weniger häufig verwendete Beispiele sind Ocaml und Common Lisp. Da die meisten dieser Sprachen in C geschrieben sind, haben sie eine natürliche Fremdfunktionsschnittstelle zu C. Es ist jedoch nicht so einfach, beispielsweise eine Perl-Bibliothek aus Python oder umgekehrt aufzurufen. In der Praxis neigen die Leute also dazu, entweder
Verwenden Sie eine Bibliothek, die in ihrer Implementierungssprache geschrieben ist, normalerweise als Teil der Standardbibliotheken oder auf andere Weise allgemein verfügbar
Rufen Sie eine C / C ++ - Bibliothek über die Sprachen FFI auf. Dies setzt voraus, dass ein Wrapper noch nicht existiert, da er sonst nicht leicht von (1) zu unterscheiden ist.
(2) ist normalerweise schwieriger, da Sie die C / C ++ - Funktion selbst umbrechen müssen. Außerdem müssen Sie entweder die Bibliothek bündeln oder eine zusätzliche Abhängigkeit hinzufügen. Aus diesem Grund verwenden Benutzer eher die integrierten Sprachbibliotheken als beispielsweise GSL (in C).
Bei sehr generischen Routinen, z. B. der Erzeugung von Zufallsstichproben aus Verteilungen oder grundlegenden numerischen Routinen wie der Quadratur von Integralen, ist es einfach und üblich, einige Bibliotheken wiederzuverwenden. Da die Funktionalität, die Sie implementieren möchten, immer komplexer wird, wird es exponentiell unwahrscheinlicher, dass Sie genau die gewünschte Funktion in einer anderen Bibliothek finden, und selbst wenn Sie dies tun, können Sie viel Zeit damit verbringen, die Funktion zu suchen und schließlich anzupassen notwendig (der Code-Stil / Design könnte zum Beispiel ein Problem sein). Und wie oben diskutiert, hat man Zugriff auf nur eine Teilmenge der Bibliotheken da draußen. Andererseits kann es entmutigend sein, einen Algorithmus selbst zu implementieren, wenn er komplex ist und nicht das Hauptaugenmerk liegt, und natürlich muss man sich mit diesen lästigen Geschwindigkeitsproblemen befassen.
Dies wird zu einem Optimierungsproblem bei der Kosten-Nutzen-Analyse. Ich habe die Erfahrung gemacht, dass ich selbst für vergleichsweise Standardtechniken wie MCMC in der Regel meinen eigenen Code schreibe, weil er besser zu der Art und Weise passt, wie ich die gesamte Software entwerfe.
Selbst wenn Sie den Code am Ende nicht verwenden, können Sie natürlich auch aus dem Code anderer lernen. Ich weiß allerdings nicht, wie oft sich Wissenschaftler tatsächlich die Mühe machen, dies zu tun. Mein Eindruck ist, dass das Lesen des Codes anderer Leute eher eine Sache des Software-Ingenieurs ist.