\documentclass[DIV16,twocolumn,10pt]{scrreprt}
%\usepackage{paralist}
%\usepackage{graphicx}
\usepackage[final]{hcar}

%include polycode.fmt

\begin{document}

\begin{hcarentry}{D\'{e}j\`{a} Fu: Concurrency Testing}
\report{Michael Walker}
\status{actively developed}
\makeheader

% (WHAT IS IT?)

D\'{e}j\`{a} Fu is a concurrency testing tool for Haskell. It provides
a typeclass abstraction over a large subset of the functionality in
the \emph{Control.Concurrent} module hierarchy, and makes use of
testing techniques pioneered in the imperative and object-oriented
worlds.

The testing trades completeness for speed, by bounding the number of
preemptions and yields in a single execution, as well as the overall
length. This also allows testing of potentially non-terminating
programs. All of these bounds are optional, however, and can be
disabled, or changed.

% (WHAT IS ITS STATUS? / WHAT HAS HAPPENED SINCE LAST TIME?)

A brief list of supported functionality:

\begin{itemize}
\item Threads: the \verb|forkIO*| and \verb|forkOn*| functions,
  although bound threads are not supported.
\item Getting and setting capablities (testing default is two).
\item Yielding and delaying.
\item Mutable state: STM, \verb|MVar|, and \verb|IORef|.
\item Relaxed memory for \verb|IORef| operations: total store order
  (the testing default) and partial store order.
\item Atomic compare-and-swap for \verb|IORef|.
\item Exceptions.
\item All of the data structures in \emph{Control.Concurrent.*} and
  \emph{Control.Concurrent.STM.*} have typeclass-abstracted
  equivalents.
\end{itemize}

This is quite a rich set of functionality, although it is not
complete. If there is something else you need, file an issue!

% (CAN OTHERS GET IT?)



% (WHAT ARE THE IMMEDIATE PLANS?)

A new release, dejafu-0.3, has recently been pushed to Hackage. This
fixes a number of bugs and greatly improves the performance. The main
remaining inefficiency is the handling of asynchronous exceptions,
which is likely to be a focus of work for the next release. No large
API changes are anticipated, however.

\FurtherReading

\url{http://hackage.haskell.org/package/dejafu}

\begin{itemize}
\item The 2015 Haskell Symposium paper is available at
  \url{http://bit.ly/1N2Lkw4}; and a more up-to-date technical report
  is available at \url{http://bit.ly/1SMHx4U}.

\item There are a number of blog posts on the functionality and
  implementation at \url{https://www.barrucadu.co.uk}.
\end{itemize}

\end{hcarentry}

\end{document}
