How to improve the performance of Haskell IO? -


it seems haskell's io relatively slow.

for example, comparing haskell python

#io.py import sys s=sys.stdin.read() sys.stdout.write(s) 

,

-- io.hs main =     s <- getcontents     putstr s 

their performance (gen.py writes 512k data stdout):

the python version:

$ time python gen.py | python io.py > /dev/null  real    0m0.203s user    0m0.015s sys     0m0.000s 

the haskell version:

$ time python gen.py | runhaskell io.hs > /dev/null  real    0m0.562s user    0m0.015s sys     0m0.000s 

it seems haskell 1 far lower. there problem test? or inherent problem of haskell?

thanks.

your example slow because uses lazy io string-s. both have own overheads.

in particular, string linked list of char-s, therefore has 2 words of space overhead each character (one word constructor tag , 1 forward pointer), , each character takes @ least 1 word (one word cached low characters, 3 words uncached characters).

strict io byte or unicode array input faster. try benchmark following:

import qualified data.bytestring b  main = b.putstr =<< b.getcontents 

or following:

import qualified data.text t import qualified data.text.io t  main = t.putstr =<< t.getcontents 

Comments

Popular posts from this blog

facebook - android ACTION_SEND to share with specific application only -

python - Creating a new virtualenv gives a permissions error -

javascript - cocos2d-js draw circle not instantly -