The dejafu package

[Tags:library, mit]

[Déjà Fu is] A martial art in which the user's limbs move in time as well as space, […] It is best described as "the feeling that you have been kicked in the head this way before" -- Terry Pratchett, Thief of Time

Concurrency is nice, deadlocks and race conditions not so much. The Par monad family, as defined in abstract-par provides deterministic parallelism, but sometimes we can tolerate a bit of nondeterminism.

This package builds on the concurrency package by enabling you to systematically and deterministically test your concurrent programs.


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.2.0.0, 0.3.0.0, 0.3.1.0, 0.3.1.1, 0.3.2.0, 0.3.2.1, 0.4.0.0, 0.5.0.0, 0.5.0.2, 0.5.1.0, 0.5.1.1, 0.5.1.2, 0.5.1.3, 0.6.0.0, 0.7.0.0, 0.7.0.1, 0.7.0.2
Change log CHANGELOG.markdown
Dependencies base (>=4.8 && <5), concurrency (==1.1.*), containers (==0.5.*), deepseq (>=1.1 && <2), exceptions (>=0.7 && <0.9), leancheck (==0.6.*), mtl (==2.2.*), random (>=1.0 && <1.2), ref-fd (==0.4.*), semigroups (>=0.16 && <0.19), transformers (>=0.4 && <0.6), transformers-base (==0.4.*) [details]
License MIT
Author Michael Walker
Maintainer mike@barrucadu.co.uk
Category Concurrency
Home page https://github.com/barrucadu/dejafu
Source repository head: git clone https://github.com/barrucadu/dejafu.git
this: git clone https://github.com/barrucadu/dejafu.git(tag dejafu-0.7.0.2)
Uploaded Mon Jun 12 02:57:41 UTC 2017 by barrucadu
Distributions LTSHaskell:0.4.0.0, NixOS:0.7.0.2, Stackage:0.7.0.2, Tumbleweed:0.4.0.0
Downloads 919 total (123 in the last 30 days)
Votes
0 []
Status Docs available [build log]
Last success reported on 2017-06-12 [all 1 reports]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Readme for dejafu

Readme for dejafu-0.7.0.2

dejafu

[Déjà Fu is] A martial art in which the user's limbs move in time as well as space, […] It is best described as "the feeling that you have been kicked in the head this way before"

-- Terry Pratchett, Thief of Time

Concurrency is nice, deadlocks and race conditions not so much. The Par monad family, as defined in abstract-par provides deterministic parallelism, but sometimes we can tolerate a bit of nondeterminism.

This package builds on the concurrency package (also in this repository) by enabling you to systematically and deterministically test your concurrent programs.

The documentation of the latest developmental version is available online. Examples can be found in the test suite.

Note on the test suite: This is in a separate project (dejafu-tests) because Cabal-the-library is a bit naff. See this issue.

Déjà Fu and IO

The core assumption underlying Déjà Fu is that any apparent nondeterminism arises purely from the scheduling behaviour. To put it another way, a given computation, parametrised with a fixed set of scheduling decisions, is deterministic.

Whilst this assumption may not hold in general when IO is involved, you should strive to produce test cases where it does.

Memory Model

The testing functionality supports a few different memory models, for computations which use non-synchronised CRef operations. The supported models are:

  • Sequential Consistency: A program behaves as a simple interleaving of the actions in different threads. When a CRef is written to, that write is immediately visible to all threads.

  • Total Store Order (TSO): Each thread has a write buffer. A thread sees its writes immediately, but other threads will only see writes when they are committed, which may happen later. Writes are committed in the same order that they are created.

  • Partial Store Order (PSO): Each CRef has a write buffer. A thread sees its writes immediately, but other threads will only see writes when they are committed, which may happen later. Writes to different CRefs are not necessarily committed in the same order that they are created.

If a testing function does not take the memory model as a parameter, it uses TSO.

Contributing

Bug reports, pull requests, and comments are very welcome!

Feel free to contact me on GitHub, through IRC (#haskell on freenode), or email (mike@barrucadu.co.uk).