Mis 2 centavos
Creo que es más fácil escribir en general sobre esto, en lugar de solo sobre C / C ++. Primero, las bibliotecas en lenguajes como Python no se usan necesariamente para obtener un beneficio de velocidad, incluso si eso es una consecuencia. Creo que
@David cubrió las razones bastante bien.
Tomándolo desde arriba, la implementación del lenguaje en cierta medida dicta a qué bibliotecas tiene acceso. Los lenguajes de uso común en ciencia computacional incluyen C, C ++, Python, Perl, Java, Fortran y R. Ejemplos menos comunes pueden ser Ocaml y Common Lisp. Ahora, dado que la mayoría de estos lenguajes están escritos en C, tienen una interfaz de función externa natural para C. Sin embargo, no es tan fácil llamar, por ejemplo, una biblioteca Perl de Python o viceversa. Entonces, en la práctica, las personas tienden a
Use una biblioteca escrita en su lenguaje de implementación, usualmente algo que es parte de las bibliotecas estándar, o de otra manera ampliamente disponible, o
Llame a una biblioteca C / C ++ a través de los idiomas FFI. Esto supone que todavía no existe un contenedor, ya que si lo hace, no se puede distinguir fácilmente de (1).
(2) suele ser más difícil, ya que debe ajustar la función C / C ++ usted mismo. Además, debe agrupar la biblioteca o agregar una dependencia adicional. Por esa razón, es más probable que las personas usen las bibliotecas de idiomas incorporadas en lugar de usar GSL, por ejemplo, que está en C.
Para rutinas muy genéricas, por ejemplo, generar muestras aleatorias a partir de distribuciones o rutinas numéricas básicas como la cuadratura de integrales, es fácil y común reutilizar alguna biblioteca. A medida que la funcionalidad que uno intenta implementar se vuelve más compleja, se vuelve exponencialmente más improbable que uno encuentre la función exacta que desea en otra biblioteca, e incluso si lo hace, podría pasar mucho tiempo buscando y finalmente adaptando la función como necesario (el estilo / diseño del código podría ser un problema, por ejemplo). Y como se discutió anteriormente, uno tiene acceso a solo un subconjunto de las bibliotecas disponibles. Por otro lado, implementar un algoritmo si es complejo y no es el foco principal puede ser desalentador, y por supuesto, uno tiene que lidiar con esos molestos problemas de velocidad.
Por lo tanto, esto se convierte en un problema de optimización en el análisis de costo / beneficio. Mi experiencia es que incluso para técnicas comparativamente estándar como MCMC, generalmente termino escribiendo mi propio código, porque se adapta mejor a cómo estoy diseñando el software en general.
Por supuesto, incluso si termina sin usar el código, es posible aprender del código de otras personas. Sin embargo, no sé con qué frecuencia los científicos realmente se molestan en hacer esto. Mi impresión es que leer el código de otras personas para aprender es más una cosa de ingeniero de software.