kidd / missionary

A functional effect and streaming system for clojure and clojurescript.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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 & flow, 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
  3. Comparison to RxJava

Guides

  1. Retry with backoff
  2. Happy eyeballs
  3. Iterative queries

Community

About

A functional effect and streaming system for clojure and clojurescript.

License:Eclipse Public License 2.0


Languages

Language:Java 52.4%Language:Clojure 47.6%