We formally define an elegant multi-paradigm unification of Functional
Reactive Programming, Actor Systems, and Object-Oriented Programming. This
enables an intuitive form of declarative programming, harvesting the power of
concurrency while maintaining safety.
We use object and reference capabilities to highlight and tame imperative
features: reference capabilities track aliasing and mutability, and object
capabilities track I/O. Formally, our type system limits the scope, impact and
interactions of impure code.
- Scope: Expressions whose input is pure will behave deterministically.
- Impact: Data-races and synchronisation issues are avoided. The only way for
an actor to behave nondeterministically, is by mutating its state based on
message delivery order.
- Interactions: Signals provide a functional boundary between imperative and
functional code, preventing impure code from invalidating functional
assumptions.
History
Preferred citation
Webster, N. & Servetto, M. (2020). Smoothly Navigating between Functional Reactive Programming and Actors. http://arxiv.org/abs/2008.12592v2