[Haskell-cafe] Re: "C" buffer suggestions??
Don Stewart
dons at galois.com
Mon Jun 23 17:27:03 EDT 2008
agl:
> 2008/6/23 Galchin, Vasili <vigalchin at gmail.com>:
> > Basically I want to model POSIX async io "aiocb"(
> > http://uw714doc.sco.com/en/man/html.5/aiocb.5.html) in Haskell .. in
> > particular the aiocb field "aio_buf"!
>
> That's a mutable buffer, so this has to be pretty low level in your
> wrapping of the AIO interface. I would keep it as a Ptr Word8 at that
> point. ByteStrings are probably the correct type for the user visible
> interface, but I would guess not here.
>
> Plus, ByteString data lives in the Haskell heap so could get moved
> about by the collector. Since an AIO interface is probably going to
ByteStrings are allocated into pinned memory, so they're easy to pass to
C and back. It uses the fast 'mallocPlainForeignPtr' api,
-- GHC notes: 'mallocPlainForeignPtr' has a heavily optimised
-- implementation in GHC. It uses pinned memory in the garbage
-- collected heap, as for mallocForeignPtr.
So heap allocated and collected, but not moved.
> return while the IO is still in progress, you don't want to stop the
> collector, but nor do you want the data moving because the kernel's
> pointer isn't going to move with it.
-- Don
More information about the Haskell-Cafe
mailing list