Hello Marcin, Sunday, February 12, 2006, 8:04:26 PM, you wrote:
>> i reported only the speed of the buffering transformers. this don't >> include speed of char encoding that should be very low at this time. MQK> Recoding will be slow if it's done on top of buffering and if encoding MQK> itself has heavy startup. Buffering should be on the very top, so it MQK> amortizes the cost of starting the recoder. MQK> It should be possible to use iconv for recoding. Iconv works on blocks MQK> and it should not be applied to one character at a time. recoding don't need any startup. each vGetChar or vPutChar just executes one or more vGetByte/vPutByte calls, according to encoding rules. this should be fast enough MQK> Byte streams and character streams should be distinguished in types, MQK> preferably by class-constrained parametric polymorphism. In particular so that vGetBuf, vGetChar, and getWord32 can't be used at the same stream? MQK> byte buffers and char buffers should be reperesented differently, MQK> so block copying between byte streams moves whole blocks of memory. in my lib, block copying between streams can be performed only at the byte level. if you need to copy N chars with non-trivial encoding, or need to copy chars with recoding, you should use "vGetChar h1 >>= vPutChar h2" operation repeated MQK> I have designed and implemented these issues for my language Kogut, MQK> and now I'm trying to port them to Haskell. MQK> Static typing gets in the way in various places (hiding the type MQK> behind an existentially qualified type, passing optional named MQK> arguments), but it looks doable. MQK> The design uses buffers internally. A buffer is a queue of characters MQK> or bytes, with amortized O(1) cost of operating at an end, and fast MQK> block operations. A buffer itself is a stream too (reading eats its MQK> contents from the beginning, writing appends to the end). i use different design. we can compare speed/features/robustness/easy of adding new features of our libraries. you can see my lib at: You can find further information about the library at the page http://haskell.org/haskellwiki/Library/Streams and download it as http://freearc.narod.ru/Streams.tar.gz -- Best regards, Bulat mailto:[EMAIL PROTECTED] _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe