[Haskell-cafe] bytestring vs. uvector
lemming at henning-thielemann.de
Mon Mar 9 06:07:20 EDT 2009
On Sat, 7 Mar 2009, Bryan O'Sullivan wrote:
> On Sat, Mar 7, 2009 at 10:23 PM, Alexander Dunlap <alexander.dunlap at gmail.com> wrote:
> Hi all,
> For a while now, we have had Data.ByteString[.Lazy][.Char8] for our
> fast strings. Now we also have Data.Text, which does the same for
> Unicode. These seem to be the standard for dealing with lists of bytes
> and characters.
> Now we also have the storablevector, uvector, and vector packages.
> These seem to be also useful for unpacked data, *including* Char and
> Word8 values.
> What is the difference between bytestring and these new "fast array"
> libraries? Are the latter just generalizations of the former?
> storablevector is not mature (I'm not even sure if it's actually used) and is a derivative of
> an old version of the bytestring library, and so has similar characteristics for interacting
> with foreign code. It contains some old fusion code that is sketchy in nature and somewhat
> likely to be broken. I'm not sure I would recommend using this library.
As maintainer of storablevector I can tell that I use it for realtime
audio signal processing. Indeed, I expected more of the fusion mechanism
than it can do. It is hard to get correct fusion on lazy storablevectors
at all, because of non-matching chunk sizes. Thus I didn't follow that
path anymore. For audio signal processing I use a list type, like that of
the Streams approach. When you convert those streams into storable vectors
you get efficient inner loops without any fusion. It would certainly be
worth to fuse with those Stream lists, but I haven't tried that so far.
More information about the Haskell-Cafe