2012-04-26 12 views
19

Tengo un procedimiento relativamente lento (bien llamado lento), y me gustaría hacer algo comoObtener los tiempos en GHCi

time $ slow [1,2,3,4,5] 

en la consola (REPL) para obtener el tiempo, en lugar de tener que compilar el programa y luego el tiempo de ejecución.

¿Se puede hacer esto?

+3

In ghci? ': set + s' te proporciona estadísticas de tiempo y asignación para todas las expresiones evaluadas. Puede escribir un 'tiempo' usando' System.CPUTime.getCPUTime', si lo desea. –

+1

Solo tenga en cuenta que el programa interactivo no le dará información precisa sobre el rendimiento compilado. – rotskoff

+5

Puede que le guste 'time runhaskell foo.hs' y su compañero más honesto' ghc foo.hs -O2 && time./Foo'. –

Respuesta

35

Si ingresa :set +s en GHCi, la información de tiempo y memoria se imprimirá después de la evaluación de cada expresión.

Ejemplo:

Prelude> :set +s 
Prelude> sum [1..2^20] 
549756338176 
it :: (Num a, Enum a) => a 
(0.34 secs, 169,197,008 bytes) 

Tenga en cuenta que este será el momento de la expresión evaluada en el intérprete, sin optimización, por lo que no será necesariamente una medida precisa del tiempo que tome las cosas, o incluso cuál de las dos versiones del mismo código será más rápida, en el código compilado real. Para eso, eche un vistazo a la biblioteca de evaluación comparativa criterion.

Cuestiones relacionadas