Name: atomic-primops Version: 0.5 x-revision: 1 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. 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/Makefile, testing/CommonTesting.hs, testing/CounterTests.hs, testing/hello.hs -- Makefile, Test.hs, README.md 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.6.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: 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