From: Heinrich Apfelmus <apfelmus@quantentunnel.de>
Jason Dagit wrote:
> Heinrich Apfelmus wrote:
>>
>> I'm curious, can you give an example where you want to be explicit about
>> chunking? I have a hard time imagining an example where chunking is
>> beneficial compared to getting each character in sequence. Chunking
>> seems to be common in C for reasons of performance, but how does that
>> apply to Haskell?
>
> [...]
> I think it basically comes down to this: We replace lazy io with explicit
> chunking because lazy io is unsafe, but explicit chunking can be safe.
Ah, I mean to compare Iteratees with chunking to Iteratees with single
character access, not to lazy IO.
In C, this would be a comparison between read and getchar . If I
remember correctly, the former is faster for copying a file simply
because copying one character at a time with getchar is too granular
(you have to make an expensive system call every time). Of course, this
reasoning only applies to C and not necessarily to Haskell.
Do you have an example where you want chunking instead of single
character access?
I am unable to think of any examples where you want chunking for any reason other than efficiency. Yesterday I spent some time on an element-wise iteratee implementation, and unfortunately it's significantly slower than any of the chunked implementations. I'm certain there's room for optimization, but I don't know if it's possible to make up the whole difference. I'd need to make some examination of the core to figure out where it could be improved.
It's also possible that certain other implementations, such as your ProgramT version or the simplified implementation John Millikin recently posted to this list, would be more amenable to compiler magic for this purpose.
John