
On Sat, 2007-12-15 at 19:07 -0800, Don Stewart wrote:
Well, I'm not going to wait till Wednesday for the numbers!
But I got you to write down predictions before you ran the tests, which is precisely what I wanted :)
Summary,
* Program 1 is fast, as expected, but exhbits a bug in the bytestring library's lazy bytestring fusion system. Something in length or filter isn't doing the right job. This code will be replaced by the stream fusion system soon.
Good.
* Program 2: as expected. strict IO uses O(N) space, and that has performance effects.
* Program 3: lazy bytestrings use constant space, but you better avoid redundant bounds checks in the inner loops.
Maybe its extra bounds-checking that makes it slow, as you say. It probably is. I must admit that I couldn't follow the core/stg/C--/assembly code at all.
* Program 4: strings are silly
No they are not. They are the default data structure for text and give the baseline that bytestrings should beat. I find it interesting to see *if* bytestrings beat it and if so, by how much. The vanilla string versions of my tests all use less memory than any of the other versions, but they are a bit slower. And perhaps not as much slower as they should be...
* Program 5: as expected. similar to program 2.
* Program 6: strict foldl's over lazy bytestrings are good :) fast, and constant space.
* Program 7: see program 4.
Pretty much as expected then, but with a bug identified in lazy bytestring fusion (I think).
Nice little benchmark.
Thanks :) There are more... -Peter