[Haskell-cafe] Fun with ByteStrings [was: A very edgy language]

Stefan O'Rear stefanor at cox.net
Sun Jul 8 11:27:06 EDT 2007


On Sun, Jul 08, 2007 at 04:16:46PM +0100, Andrew Coppin wrote:
> Malte Milatz wrote:
>> Stefan O'Rear:
>>   
>>> [Char] is a linked list of pointers to heap-allocated fullword integers, 
>>> 20 (40) bytes per character (assuming non-latin1).
>>>     
>>
>> Hey, I love ByteStrings!  ;-)
>>   
>
> If only there were a way to write functions that transparently work on both 
> [x] and ByteString...
>
> (Well, I mean, there *is* - if you want to write *lots* of code by hand 
> yourself...)
>
> Anyone have any comments on how ByteString is different from, say, UArray 
> Word8?

1. ByteString uses pinned memory, so you can safely pass ByteStrings to
   C code (as char*) without worrying about the strings moving.

2. ByteString uses foreignptrs, which mean that you can construct
   bytestrings from any block of memory, and you can associate arbitrary
   actions (free(), nothing, something fancier, ...) with the ByteString
   becoming unreferenced.

3. ByteString uses explicit offset and length fields, allowing a O(1)
   tail operation (very important for functional-style code)

4. Lazy bytestrings are completely different - look elsewhere in this
   thread.

Stefan


More information about the Haskell-Cafe mailing list