[Haskell-cafe] Re: Is Haskell capable of matching C in string processing performance?

John Lato jwlato at gmail.com
Fri Jan 22 10:15:20 EST 2010

> From: Heinrich Apfelmus <apfelmus at quantentunnel.de>
> Don Stewart wrote:
>> jmillikin:
>>> Here's the fastest Haskell version I could come up with. It discards
>>> all error handling, validation, and correctness in the name of
>>> performance, but still can't get anywhere near C:
>>> http://hpaste.org/fastcgi/hpaste.fcgi/view?id=16423
>> Thanks for posting the code.
>> You're not using bytestrings??
>> They were invented to deal with the problem of [Char] being a poor
>> structure for large scale string processing, and you should have no
>> problem getting C-like string performance.
>>     http://www.cse.unsw.edu.au/~dons/papers/CSL06.html
> In my limited experience, ByteStrings are great for reading data, but
> not that good for writing data that is being generated on the fly. For
> writing, good old difference lists or the  Builder  monoid / Put monad
> from Data.Binary seem to be best.

If find that this is particularly true if you don't know the length of
data to write in advance because it involves lots of new allocations
and copying.  Using Builder/Put is definitely a better approach.

Out of curiousity, has anyone ever tried implementing a
LinkedListString in C to check what its performance would be?  I
expect it would be pretty poor compared to standard strings.


More information about the Haskell-Cafe mailing list