In a recent discussion with Manuel Chakravarty the following question
arose. Given the following code:

   foo = do
      ba <- newMutableByteArray ...
      ...
      bar ba
      -- ba not used here anymore

  foreign import ... bar :: MutableByteArray ... -> IO ()

Let's further assume that bar makes callbacks to Haskell-land where a
GC occurs. Now the subtle question: Is it *guaranteed* that ba is
considered alive until bar returns or not? Either way, this should be
clarified in the FFI documentation.

Background: A lot of APIs (e.g. GTK+ and OpenGL :-) have functions
expecting a pointer to some data. One possible way to use them from
Haskell is

   * malloc area
   * fill area with data
   * call API function with pointer to area
   * explicitly free malloced area

Using (Mutable)ByteArrays would simplify thing here, especially the
last step would not be needed.

Cheers,
   Sven
-- 
Sven Panne                                        Tel.: +49/89/2178-2235
LMU, Institut fuer Informatik                     FAX : +49/89/2178-2211
LFE Programmier- und Modellierungssprachen              Oettingenstr. 67
mailto:[EMAIL PROTECTED]            D-80538 Muenchen
http://www.informatik.uni-muenchen.de/~Sven.Panne

Reply via email to