todc
is a collection of Rust crates for distributed computing.
This is very experimental. The goal of this library is to bridge the gap between theory and practice by providing usable, understandable, and correct implementations of algorithms from classic papers.
For message passing systems, todc-net
provides implementations for services that communicate over HTTP.
AtomicRegister
, a simluation of an atomic shared-memory register, as described by Attiya, Bar-Noy and Dolev [ABD95].
For shared memory systems, todc-mem
provides implementations for processes running on a single peice of hardware.
-
AtomicRegister
, a shared-memory register backed by 64 bits of "atomic" memory. -
UnboundedSnapshot
andBoundedSnapshot
, wait-free snapshots that requires$\Theta(n^2)$ operations, as described by Afek et al. [AAD+93]. -
LatticeMutexSnapshot
, an$M$ -shot snapshot that requires$O(n \log n)$ operations, as described by Attiya and Rachman [AR98].
For general utilities, todc-utils
provides helpful tools for building and testing distributed systems.
WGLChecker
a fast linearizability checker, based on work by Wing and Gong [WG93], Lowe [L17], and Horn and Kroenig [HK15].
Code coverage can be calculated with cargo-llvm-cov.
Some tests can only be run when certain features are enabled. To most-accurately
calculate code coverage, check the the coverage
step of CI.