Proposal: add new forms of unsafePerformIO and unsafeInterleaveIO

John Meacham john at repetae.net
Fri Feb 22 07:19:36 EST 2008


On Fri, Feb 22, 2008 at 09:41:46AM +0000, Simon Marlow wrote:
>> I propose that unsafeDupablePerformIO be renamed to unsafePerformIO,
>> since it satisfies all of the properties guaranteed of unsafePerformIO.
>> GHC's unsafePerformIO guarantees more, and should be called
>> unsafePerformIOAtMostOnce or something.
>
> That's certainly a defensible position, but I'll present a counter-argument.
>
> If you've managed to use unsafePerformIO in a way that works on a single 
> processor, then you will probably be tempted to assume that it will work on 
> a multiprocessor too.  Currently unsafePerformIO tries to make that true 
> (although it's not foolproof, and it's quite expensive).
>
> Look at all that stuff in the docs for unsafePeformIO about -fno-cse and 
> let-floating (I think it goes too far, in fact - if your use of 
> unsafePerformIO is that fragile then you're doing something wrong).  If 
> unsafePerformIO was the dupable version by default, then all that goes out 
> of the window if you happen to be running with two threads on an SMP.  And 
> if you're writing a library, you have to assume the worst and go for the 
> AtMOstOnce version - who would remember to do that?
>
> Better for the default version to be safe in this respect, IMO.  The bugs 
> we'd get from this would be really hard to track down.

Also, unsafePerformIO is in the FFI specification, even though it isn't
fully specified with respect to multi-processing I think there was some
expectations of what 'unsafePerformIO' meant, for better or worse.

        John

-- 
John Meacham - ⑆repetae.net⑆john⑈


More information about the Libraries mailing list