[Haskell-cafe] what does "atomically#" mean?
Don Stewart
dons at galois.com
Mon Dec 8 01:48:23 EST 2008
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
More information about the Haskell-Cafe
mailing list