unsafePerformIO safety.

David Brown haskell2 at davidb.org
Tue Mar 6 18:18:36 EST 2007


Seth Kurtzberg wrote:
> On Tue, 06 Mar 2007 12:03:05 -0800
> David Brown <haskell2 at davidb.org> wrote:
>
>> I've noticed quite a few pages referencing constructs such as:
>>
>>   var :: MVar ([Foo])
>>   var = unsafePerformIO (newMVar ([]))
>>
>> and the likes.  Is there a danger of different uses of 'var' getting
>> new MVars instead of all sharing one.
>>
>> Having a reliable way to create a piece of global state would be very
>> convenient.
>
> This operation is unsafe by definition.  I use it extensively,
> without problems.  The "unsafe" in the name reminds you that there
> are situations for which the function is inappropriate, but all of
> my deployed commercial programs have functionality of this sort.
> Understand the risk, but don't hesitate to use it.

Do you do anything to keep 'var' from getting inlined?  I can envision
a case where the code would be inlined, and then each use would get a
separate MVar.

Thanks,
Dave



More information about the Glasgow-haskell-users mailing list