FSharp ejecuta mi algoritmo más lento que Python
ace @ años, resolví un problema mediante programación dinámica:
https: //www.thanassis.space/fillupDVD.htm
La solución fue codificada en Python.
Como parte de la expansión de mis horizontes, recientemente comencé a aprender OCaml / F #. Qué mejor manera de probar las aguas que haciendo un puerto directo del código imperativo que escribí en Python a F #, y comenzando desde allí, avanzando en pasos hacia una solución de programación funcional.
Los resultados de este primer puerto directo ... son desconcertantes:
Bajo Python:
bash$ time python fitToSize.py
....
real 0m1.482s
user 0m1.413s
sys 0m0.067s
Bajo FSharp:
bash$ time mono ./fitToSize.exe
....
real 0m2.235s
user 0m2.427s
sys 0m0.063s
(en caso de que haya notado el "mono" anterior: también probé en Windows, con Visual Studio - misma velocidad).
Estoy ... perplejo, por decir lo menos. Python ejecuta código más rápido que F #? Un binario compilado, usando el tiempo de ejecución .NET, ejecuta MÁS LENTO que el código interpretado de Python?!?!
Sé sobre los costos de inicio de las máquinas virtuales (mono en este caso) y cómo los JIT mejoran las cosas para lenguajes como Python, pero aún así ... ¡esperaba una aceleración, no una desaceleración!
¿He hecho algo mal, tal vez?
He subido el código aquí:
https: //www.thanassis.space/fsharp.slower.than.python.tar.g
enga en cuenta que el código F # es más o menos una traducción directa, línea por línea del código de Python.
PD. Por supuesto, hay otras ganancias, p. la seguridad de tipo estático que ofrece F #, pero si la velocidad resultante de un algoritmo imperativo es peor con F # ... Estoy decepcionado, por decir lo menos.
EDITA: Acceso directo, según lo solicitado en los comentarios:
el código de Python:https: //gist.github.com/95069
el código FSharp:https: //gist.github.com/95069