logo       

Re: [Haskell] ANNOUNCE: FPS - FastPackedStrings 0.2: msg#00100

lang.haskell.libraries

Subject: Re: [Haskell] ANNOUNCE: FPS - FastPackedStrings 0.2

Donald Bruce Stewart wrote:
bulat.ziganshin:

2. it uses ForeignPtr, that is slow in ghc 6.4 and require more
memory than ByteArray# in any ghc version. in addition, you place two
Ints here. it's question of taste, of course - whether we want to have
better speed or memory requirements. i personally prefer to have
minimal memory overhead that will be accomplished by using ByteArray#
plus one Int to hold string's size. it's possible to write lib so it
will use any unboxed array and this will work both with ForeignPtr
and ByteArray# implementations. It will also allow to implement
general list-like interface for any immutable arrays what should be
useful, in particular for collections framework that is now written by
JP Bernardy. of course, using general Array instead of ForeignPtr will
make some functions (such as mmap) unimplementable for common case

That's quite a big change. I'd like to see a prototype first, and some
numbers. As SPJ sometimes says: "show me the code".

Optimising the library for GHC 6.4.x isn't a goal (for me, at least). I'm convinced that ForeignPtr is the right choice. No other representation can give you all of these:

- converting arbitrary Ptrs into PackedStrings without copying,
including finalizers if necessary (useful for mmap()).

- garbage-collectable PackedStrings can be allocated on the heap, no
finalizer necessary

- PackedStrings can be passed to foreign functions without copying

ByteArray# only gives you the second two. You would need two variants of the representation to get all three, and that means extra overhead.

Cheers,
Simon


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise