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