On Thu, May 27, 2010 at 11:28 AM, Ivan Miljenovic <ivan.miljenovic@gmail.com
wrote:
On 27 May 2010 18:23, Michael Snoyman <michael@snoyman.com> wrote:
On Thu, May 27, 2010 at 11:16 AM, Ivan Miljenovic <ivan.miljenovic@gmail.com> wrote:
On 27 May 2010 17:55, Michael Snoyman <michael@snoyman.com> wrote:
Two comments: * The exclamation point seems good enough for attributes. I copied
that
for Hamlet as well. * If you're standardizing on UTF-8, why not support bytestrings? I'm aware that a user could shoot him/herself in the foot by passing in non-UTF8 data, but I would imagine the performance gains would outweigh this. My recent benchmarks on the BigTable benchmark[1] imply a huge performance gap between ByteStrings and other contenders.
Wow, I find it rather surprising that String out-performs Text; any idea why that is? I wonder if you're just using it wrong...
Could be, I'd be very happy if that were the case. All of the benchmarks are available on Github, and the bytestring[1], text[2] and string[3] versions are all rather short.
Does using lazy Text values improve this? I find it a little strange that you concatenate so many individual Strings that much. Also, how about explicitly using Text values rather than OverloadedStrings?
I don't do any string concatenation (look closely), I was very careful to avoid it. I tried with lazy text as well: it was slower. This isn't surprising, since lazy text- under the surface- is just a list of strict text. And the benchmark itself already has a lazy list of strict text. Using lazy text would just be adding a layer of wrapping.
I don't know what you mean by "explicitly using Text values"; you mean calling pack manually? That's really all that OverloadedStrings does. You can try out lots of different variants on that benchmark. I did that already, and found this to be the fastest version. Michael