Simon Marlow <[EMAIL PROTECTED]> wrote,

> 
> > [EMAIL PROTECTED] (Marcin 'Qrczak' Kowalczyk) wrote,
> > 
> > > Wed, 16 Aug 2000 07:32:48 -0700, Simon Marlow 
> > <[EMAIL PROTECTED]> pisze:
> > > 
> > > > I'm not sure I understand; how does autoPtrToBytes work if it
> > > > doesn't use a ForeignObj?
> > > 
> > > autoPtrToBytes:: Int -> IO (Ptr a)
> > > autoPtrToBytes size = do
> > >     ptr <- mallocBytes size
> > >     addFinalizer ptr (free ptr)
> > >     return ptr
> > 
> > This looks very nice.  My only concern is that
> > `addFinalizer' is a weak pointer operation, and thus, not
> > part of the core FFI (which only provides ForeignObj and
> > StablePtr).
> 
> We shouldn't mandate addFinalizer as part of the FFI at least until we have
> a solution to the identity problem.  The only safe addFinalizers are those
> on primitive heap-resident objects (i.e. addForeignFinalizer, mkWeakIORef).
> 
> [ eg. our last thoughts on this were something like this:
>       
>       barrier :: a -> IO a
> 
>       as in   fo <- newForeignObj a
>                 fo' <- barrier fo
>                 addFinalizer fo' (...)
>                 ... only use fo' ...
> 
>       barrier is another null primop.  But this is fairly ugly and 
>       prevents some legitimate optimisations.
> 
> ]

It's a pity, but then `autoPtrToBytes' is also out for the
higher-level marshalling library IMHO (at least until this
problem is solved).

Manuel

Reply via email to