2012-04-26 30 views
19

Mam stosunkowo powolne procedury (trafnie nazwany wolno), i chciałbym zrobić coś takiegoGet czasy w GHCi

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

w konsoli (REPL), aby uzyskać czas, zamiast kompilacji program, a następnie uruchom.

Czy to można zrobić?

+3

In ghci? ': set + s' pobiera statystyki synchronizacji i alokacji dla wszystkich ocenianych wyrażeń. Możesz sam napisać 'time' używając' System.CPUTime.getCPUTime', jeśli chcesz. –

+1

Należy pamiętać, że program interaktywny nie dostarczy dokładnych informacji na temat kompilowanej wydajności. – rotskoff

+5

Może Ci się spodobać 'time runhaskell foo.hs' oraz jego bardziej uczciwy gość' ghc foo.hs -O2 && time./Foo'. –

Odpowiedz

35

Jeśli wpiszesz :set +s w GHCi, informacje o czasie i pamięci zostaną wydrukowane po dokonaniu oceny każdego wyrażenia.

Przykład:

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

Należy pamiętać, że będzie to czas wyrażenia jak oceniano w tłumacza, bez optymalizacji, więc nie będzie to koniecznie dokładną miarą tego, jak długo rzeczy wziąć, lub nawet która z dwóch wersji tego samego kodu będzie szybsza, w rzeczywistym skompilowanym kodzie. W tym celu zapoznaj się z biblioteką porównawczą criterion.