A functional effect and streaming system for clojure and clojurescript.
Experimental status, breaking changes should be expected.
Imperative-style concurrent programming comes along with serious pitfalls. Uncontrolled process spawning requires discipline and ceremony to properly handle failure and cancellation propagation, mixing essential and accidental complexity. Popular techniques such as channels and futures/promises don't solve this problem and often introduce concurrency concerns in otherwise purely sequential logic. missionary
takes a functional approach to this problem, modelling processes as values with precise semantics.
- Simple, REPL-friendly, dependency-free underlying protocols : task (specification) & flow (specification coming soon), respectively single and multiple value producers.
- Strict supervision providing transparent propagation of cancellation and failure, with strong resource cleanup guarantees.
- Unified representation of multiple-value producers supporting backpressure propagation of discrete events and lazy sampling of continuous values.
- Reactive Streams compliant
- Asynchronous design for efficiency and clojurescript compatibility
- Lightweight API leveraging standard clojure primitives (collections, transducers, reducing functions, reference types, first-class
nil
) to prevent combinatorial explosion of operators - Expressive syntax
- clojurians slack : #missionary