On Wed, Apr 7, 2010 at 11:45 AM, Duncan Coutts <[email protected]> wrote: > On Tue, 2010-04-06 at 09:03 -0700, Jason Dagit wrote: > >> On Tue, Apr 6, 2010 at 6:26 AM, Petr Rockai <[email protected]> wrote: >> Duncan Coutts <[email protected]> writes: > >> > One option would be to use a representation like a >> reverse-order list of path components, with each component >> stored as a short packed string. That allows for sharing >> between paths and would reduce the cost of using long absolute >> paths. > >> Interesting idea. I have already started using a path type >> that is a list of components (represented as bytestrings), it >> just did not occur to me to make it reverse to improve >> sharing. I'll try to look into doing that. >> >> I could be wrong, but I was under the impression that many short >> bytestrings leads to memory fragmentation in the GC. > > Indeed, which is why I said "short packed string" rather than > ByteString. I would implement a short packed string as a wrapper around > GHC's ByteArray# type which can be allocated unpinned. That gives an > overhead of 2 or 4 words compared to 5 or 8 words (differences depend on > sharing and if the type is unpacked into a containing data constructor). > >> I was also under the impression that small bytestrings have worse >> overhead than small Strings. > > If I recall correctly they even up at around 3-5 characters. However the > pinning of ByteString is a major PITA. So I would not suggest using them > for short strings. > > IMHO, ByteStrings using ForeignPtrs was a mistake (and one I hope to > correct at some point in the future). >
I've been working on a light-weight array type, modeled off of the one used internal to Data.Text over here: http://community.haskell.org/~aslatter/docs/bytearray/Data-SmallArray.html It is built on top of a slight abstraction around the GHC ByteArray#, which uses ForeignPtrs on non-GHC compilers: http://community.haskell.org/~aslatter/docs/bytearray/Data-ByteArray.html Antoine _______________________________________________ darcs-users mailing list [email protected] http://lists.osuosl.org/mailman/listinfo/darcs-users
