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 Kleisli 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.7', 'ru.primetalk:synapse-grid-akka_2.11:1.4.7']
or compile ['ru.primetalk:synapse-grid-core_2.11:1.4.7', 'ru.primetalk:synapse-grid-akka_2.11:1.4.7']
-
sbt:
libraryDependencies += "ru.primetalk" %% "synapse-grid-core" % "1.4.7" libraryDependencies += "ru.primetalk" %% "synapse-grid-akka" % "1.4.7"
(or any other build system: group: ru.primetalk, artifactId: synapse-grid-core, version: 1.4.7)
Travis build status
See also (English)
- Walkthrough.
- Motivation for SynapseGrid.
- License (BSD-like).
- Subsystems.
- Blog about SynapseGrid
- Distrubuted systems
- Typed frames.