SynapseGrid
SynapseGrid is an original approach to implement functional reactive programming paradigm in Scala. The library is based on a solid foundation of Petri nets.
A few words about what SynapseGrid is:
- framework for constructing systems that are:
- reactive
- event-driven
- resilent
- it resembles other modern event-driven architectures (ScalaRx, Akka Streams, Spark, etc.).
Feature highlights
- SynapseGrid allows function composition of "multifunctions" (functions with a few inputs and outputs). It is more flexible than monads composition of Haskell Arrows.
- Strictly typed message handling in Akka actors (more natural than in Typed actors or Typed Channels).
- Multi input/multi output functions (multifunctions).
- Systems process portions of information ASAP. The grid can be the base of real time systems.
- It is possible to nest subsystems (like matreshkas) creating modular systems.
- Declarative composition in the form of DataFlow diagram.
- Easy to use DSL:
val a = contact\[String]\("a") val b = contact\[String]\("b") val c = contact\[Char]\("c") a -> b flatMap (_.split("\\s+")) a -> c flatMap (_.toCharArray) inputs(a) outputs(b,c)
- Dependency injection replacement (accompanied with Scala traits).
- DataFlow diagram for a system can be created easily — system.toDot():
For details see README in English.
Getting started
Add a dependency to your build:
-
gradle:
compile ['ru.primetalk:synapse-grid-core_2.11:1.4.5', 'ru.primetalk:synapse-grid-akka_2.11:1.4.5']
-
sbt:
libraryDependencies += "ru.primetalk" % "synapse-grid-core_2.11" % "1.4.5" libraryDependencies += "ru.primetalk" % "synapse-grid-akka_2.11" % "1.4.5"
(or any other build system: group: ru.primetalk, artifactId: synapse-grid-core, version: 1.4.5)
Travis build status
See also (English)
- Walkthrough.
- Motivation for SynapseGrid.
- License (BSD-like).
- Subsystems.
- Blog about SynapseGrid
- Distrubuted systems
- Typed frames.