[Haskell-cafe] what does "atomically#" mean?

Daryoush Mehrtash dmehrtash at gmail.com
Fri Mar 20 16:07:30 EDT 2009


I am having hard time making sense of GHC.Conc.   Is there a writeup that
describes the significance of "#", or the meaning of "primOp" and
"primType"?

Thanks

Daryoush

On Sun, Dec 7, 2008 at 11:48 PM, Don Stewart <dons at galois.com> wrote:

> dmehrtash:
> >    Any idea was the atomically# mean in the following code?
> >
> >    atomically :: STM a -> IO a
> >    atomically (STM m) = IO (\s -> (atomically# m) s )
> >
> >    Code is from GHC.Conc module
> >    [1]
> http://www.haskell.org/ghc/docs/6.6/html/libraries/base/GHC-Conc.html
>
> It is a primitive hook into the runtime, where transactional memory is
> implemented.
>
> It is documented in the primops module in the GHC source,
>
>    $ cd ghc/compiler/prelude/
>
>    ------------------------------------------------------------------------
>    section "STM-accessible Mutable Variables"
>    ------------------------------------------------------------------------
>
>    primtype TVar# s a
>
>    primop  AtomicallyOp "atomically#" GenPrimOp
>          (State# RealWorld -> (# State# RealWorld, a #) )
>       -> State# RealWorld -> (# State# RealWorld, a #)
>       with
>       out_of_line = True
>       has_side_effects = True
>
>    primop  RetryOp "retry#" GenPrimOp
>       State# RealWorld -> (# State# RealWorld, a #)
>       with
>       out_of_line = True
>       has_side_effects = True
>
>
> Along with other primitives like:
>
> ------------------------------------------------------------------------
> section "Parallelism"
> ------------------------------------------------------------------------
>
>    primop  ParOp "par#" GenPrimOp
>       a -> Int#
>       with
>          -- Note that Par is lazy to avoid that the sparked thing
>          -- gets evaluted strictly, which it should *not* be
>       has_side_effects = True
>
> -- Don
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20090320/883ecf9b/attachment.htm


More information about the Haskell-Cafe mailing list