
agl:
2008/6/23 Galchin, Vasili
: 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