atomic-primops-0.5.0.2: atomic-primops.cabal
Name: atomic-primops
Version: 0.5.0.2
License: BSD3
License-file: LICENSE
Author: Ryan Newton
Maintainer: rrnewton@gmail.com
Category: Data
-- Portability: non-portabile (x86_64)
Build-type: Custom
-- TODO: This requirement needs to be bumped to 1.17 when the latest cabal is
-- released. This package triggers issue #1284:
Cabal-version: >=1.8
HomePage: https://github.com/rrnewton/haskell-lockfree-queue/wiki
-- Version History:
-- 0.1.0.0 -- initial release
-- 0.1.0.2 -- disable profiling
-- 0.2 -- Critical bugfix and add Counter.
-- 0.2.2 -- Add more counters
-- 0.2.2.1 -- Minor, add warning.
-- 0.3 -- Major internal change. Duplicate GHC RTS barriers and support non -threaded.
-- 0.4 -- Duplicate 'cas' as well as barriers. Add fetchAdd on ByteArray, Counter.Unboxed.
-- 0.4.1 -- Add advance support for GHC 7.8
-- 0.5 -- Nix Data.Atomics.Counter.Foreign and the bits-atomic dependency.
-- 0.5.0.2 -- IMPORTANT Bugfix release.
Synopsis: A safe approach to CAS and other atomic ops in Haskell.
Description:
After GHC 7.4 a new `casMutVar#` primop became available, but it's
difficult to use safely, because pointer equality is a highly
unstable property in Haskell. This library provides a safer method
based on the concept of "Tickets".
.
Also, this library uses the "foreign primop" capability of GHC to
add access to other variants that may be of
interest, specifically, compare and swap inside an array.
.
Changes in 0.3:
.
* Major internal change. Duplicate the barrier code from the GHC RTS and thus
enable support for executables that are NOT built with '-threaded'.
.
Changes in 0.4:
.
* Further internal changes, duplicate 'cas' routine well as barriers.
.
* Add `fetchAddByteArrayInt`
.
* Add an `Unboxed` counter variant that uses movable "ByteArray"s on the GHC heap.
.
Changes in 0.5:
.
* Remove dependency on bits-atomic unless a flag is turned on.
Extra-Source-Files: DEVLOG.md,
testing/Test.hs, testing/test-atomic-primops.cabal, testing/ghci-test.hs
testing/Makefile, testing/CommonTesting.hs, testing/CounterCommon.hs, testing/hello.hs
testing/CounterReference.hs testing/CounterUnboxed.hs testing/CounterIORef.hs
Flag debug
Description: Enable extra internal checks.
Default: False
-- The bits-atomic based modules are causing problems [2014.01.23]
Flag foreign
Description: Enable a dependency on bits-atomic and in turn provide a
foreign implementation of Counter.
Default: False
Library
exposed-modules: Data.Atomics
Data.Atomics.Internal
Data.Atomics.Counter
Data.Atomics.Counter.IORef
Data.Atomics.Counter.Reference
Data.Atomics.Counter.Unboxed
ghc-options: -O2 -funbox-strict-fields
if flag (foreign) {
exposed-modules: Data.Atomics.Counter.Foreign
build-depends: bits-atomic
}
-- casMutVar# had a bug in GHC 7.2, thus we require GHC 7.4 or greater
-- (base 4.5 or greater). We also need the "Any" kind.
build-depends: base >= 4.5.0.0 && <= 4.7.0.0, ghc-prim, primitive, Cabal
-- TODO: Try to push support back to 7.0:
-- Ah, but if we don't USE casMutVar# in this package we are ok:
-- build-depends: base >= 4.3, ghc-prim, primitive
if impl(ghc < 7.7) {
Include-Dirs: cbits
C-Sources: cbits/primops.cmm
-- Duplicate RTS functionality for GHC 7.6:
C-Sources: cbits/RtsDup.c
}
CC-Options: -Wall
-- Let the code know that profiling is on:
ghc-prof-options: -DGHC_PROFILING_ON
-- if( cabal-version < 1.17 ) {
-- ghc-prof-options: ERROR_DO_NOT_BUILD_THIS_WITH_PROFILING_YET__SEE_CABAL_ISSUE_1284
-- }
if flag(debug)
cpp-options: -DDEBUG_ATOMICS
-- -- [2013.04.08] This isn't working presently:
-- -- I'm having problems with building it along with the library; see DEVLOG.
-- -- Switching to a separate package in ./testing/
-- Test-Suite test-atomic-primops
-- type: exitcode-stdio-1.0
Source-Repository head
Type: git
Location: git://github.com/rrnewton/haskell-lockfree-queue.git