BQUARP+: Buffered Quality Aware Reactive Programming with Flexible Consistency Guarantees (for the IoT)

A library for Distributed Reactive Programming (DRP) with flexible consistency guarantees. Draws from, implements and aims to improve upon ‘Quality Aware Reactive Programming for the IoT (QUARP)’ by Proença, Baquero (https://haslab.uminho.pt/joseproenca/files/quarp.pdf).

Provides a DSL features the familiar behaviours and event streams in the spirit of FRP as two signal abstractions. Allows for fifo (absence of guarantee), causal consistency, (single source) glitch-freedom and time-synchronization (i.e. clock difference restriction) as guarantees. See hexdocs for more information (https://hexdocs.pm/bquarp).

Specifically, BQUARP+ generalizes and adapts QUARP to:

Can be easily deployed to embedded devices using https://nerves-project.org

Offers convenient deployment of small reactive programs to nodes in the network.

Can be extended with new guarantees - insofar as they can be realised using BQUARP+’s mechanisms - by adding a clause to all functions in the Context module, if so desired.

Built on top of and integrated with Observables Extended, a Reactive Extensions inspired library for Elixir (https://github.com/DriesDeBackker/observables-extended).

This library was developed mainly for academic purposes, namely for exploring distributed reactive programming (for the IoT) with consistency guarantees.

Installation

If available in Hex, the package can be installed by adding bquarp to your list of dependencies in mix.exs:

def deps do
  [
    {:bquarp, "~> 0.5.4"}
  ]
end