unsafeLocalState = unsafeDupablePerformIO?
Paterson, Ross
R.Paterson at city.ac.uk
Fri Jul 8 10:46:00 CEST 2011
Simon Marlow writes:
> We currently have
> Foreign.Marshal.Unsafe.unsafeLocalState :: IO a -> a
> unsafeLocalState = unsafePerformIO
> however, unsafePerformIO in GHC is rather expensive, because it tries to
> avoid the IO being executed more than once when there are multiple
> processors. However, for the cases that we claim unsafeLocalState is to
> be used for, it would be safe to use the cheaper unsafeDupablePerformIO
> instead.
So code using unsafeLocalState as documented will go faster? Sounds
like a clear win. That's part of the reason for documenting interfaces.
(That code misusing it will get broken is a bonus.)
It might make sense to also export unsafeDupablePerformIO from
System.IO.Unsafe, for single-threaded uses that don't conform to the
unsafeLocalState contract.
More information about the Libraries
mailing list