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