Skip to content

leonoel/missionary

Repository files navigation

Missionary

A functional effect and streaming system for clojure and clojurescript.

clojars

cljdoc

build

license

Maturity

Experimental status, breaking changes should be expected.

Rationale

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.

Guidelines

  • 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

Documentation

Reference

missionary.core

Tutorials

  1. Hello task
  2. Hello flow

Guides

  1. Retry with backoff
  2. Happy eyeballs

About

A functional effect and streaming system for Clojure/Script

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published