On 18 October 2005 10:08, Krasimir Angelov wrote: > I am curious why FPS is implemented on top of ForeignPtr. ByteArray# > based implementation should be faster and more space efficient.
Actually there's not much difference between ForeignPtr and ByteArray#, at least in GHC 6.5+ where we optimised the ForeignPtr implementation. Furthermore ForeignPtr is much more useful, because you can create a ForeignPtr from a Ptr, and you can pass a ForeignPtr to C code portably (i.e. not using GHC extensions). ForeignPtr is essential if you want to make packed strings from eg. mmap()'d memory. Also, a ForeignPtr allocated using mallocForeignPtr *is* a ByteArray#. My PackedString library (which DonS is currently merging with FPS) uses ForeignPtr and gets pretty good performance. withForeignPtr compiles to almost nothing at all: the touch# becomes visible to GHC and compiles to no code. I needed to inline unsafePerformIO to get the best results, though (not always safe, but in this case it's ok). Cheers, Simon _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe