FFI, safe vs unsafe

John Meacham john at repetae.net
Wed Mar 29 08:35:15 EST 2006

On Wed, Mar 29, 2006 at 02:05:35PM +0100, Simon Marlow wrote:
> > will all have different concrete implementations and generate
> > different code. for correctness reasons, not efficiency ones.
> Well, for correctness all you need is reentrant/blockable.  If you have
> that, all the others are efficiency hacks. 

yeah, but sometimes efficiency hacks become so pronounced they turn into
correctness problems. (tail-call optimization being the canonical

> What you are suggesting is that there may be implementations that do not
> support reentrant/blockable, but do support the others.  And in that
> case, of course you really need to know the difference between blockable
> and reentrant.  I'm just not sure the standard should allow such
> implementations.

It would be a very odd thing to disallow, seeing as how it would rule
out or at least place fairly large implementation restrictions on
yhc,hugs and jhc and not a single foreign import in the standard
libraries needs to be 'blockable reentrant' as far as I can tell.

though, I do need to look at hugs and yhcs source more carefully to know
whether that is the case for sure. it depends on a lot of implementation
details and how they handle OS-level threads and blockable in general.

> If we were to go down this route, we have to make reentrant the default:
> 'unsafe' is so-called for a good reason, you should be required to write
> 'unsafe' if you're doing something unsafe.  So I'd suggest
>   unsafe
>   concurrent unsafe
>   concurrent          -- the hard one
>   {- nothing -}

I don't really like the word 'unsafe' because it doesn't really tell you
much about what is actually unsafe. I'd go with the more descriptive:

>   nonreentrant
>   concurrent nonreentrant
>   concurrent          -- the hard one
>   {- nothing -}

where 'nonreentrant' means a proof obligation is on the programmer to
show that routine does not call back into the haskell run-time.  This
feels more future-safe too in case we add another unrelated type of
unsafety in the future.


John Meacham - ⑆repetae.net⑆john⑈

More information about the Haskell-prime mailing list