Skip to content
Snippets Groups Projects
Commit b7aa0a0b authored by Thomas Main DuBuisson's avatar Thomas Main DuBuisson
Browse files

Add BangPatterns for an accumulator. Inline decode. Specialize take, drop.

When considering a simple benchmark [1]:

   let p = ((== "en") . U.take 2)
   print . length . filter p . U.lines =<< L.readFile . head =<< getArgs

It's apparent that we are underperforming (compare to the shell script
solution, this take twice as long).  The accumulator of splitAt wasn't
strict (used bang patterns).  Also, even with -O2, the construction /
destruction of the tuple for take & drop's lifting of splitAt wasn't
being optimized away.  Perhaps more investigation should be done re:
GHC, but the cheap solution is to just duplicate code for take and
drop, which is what this patch does.

Original: user    0m1.704s
Final: user    0m1.092s

[1] http://stackoverflow.com/questions/8172889/quickly-parse-large-utf-8-text-file-in-haskell
parent ec2b8594
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment