En primer lugar, quiero hacer la afirmación inusual de que para los cálculos numéricos, los lenguajes de alto nivel son mucho más útiles a largo plazo que los lenguajes de bajo nivel. Permítanme citar libremente a un investigador del Instituto Fraunhofer que trabaja en simulaciones numéricas utilizadas en pronósticos meteorológicos.
En la última década, las CPU se volvieron 1000 veces más rápidas, mientras que los algoritmos se volvieron 1000 * 1000 más rápidos. Esto significa que los algoritmos de hoy que se ejecutan en las CPU de ayer vencerán a los algoritmos de ayer que se ejecutan en las CPU de hoy en un factor de 1000.
Obviamente, hay muchos más parámetros a tener en cuenta como la velocidad de la CPU y los algoritmos, como discos o RAM, pero esa declaración nos ayuda a entender que, si elige un lenguaje de bajo nivel, se enfoca en el factor incorrecto (1000 en lugar de 1000 * 1000).
Por supuesto, dado cualquier algoritmo numérico específico , uno puede esperar que C o Fortran superen a OCaml o Common Lisp por un factor importante (en realidad no ese). Pero si realmente está interesado en problemas numéricos y está dispuesto a mejorar los algoritmos, debe elegir un lenguaje de alto nivel que le permita expresar sus ideas a un alto nivel y mejorar fácilmente los algoritmos.
Como nota al margen, si considera escribir código numérico en OCaml, definitivamente debe saber cómo OCaml pasa los parámetros a funciones, funciones en línea y flotantes unbox. Todo esto se detalla en las notas de Xavier Leroy .