[Haskell-cafe] Re: "C" buffer suggestions??

Don Stewart dons at galois.com
Mon Jun 23 17:27:03 EDT 2008

> 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