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.).
Blog about SynapseGrid
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
- PR status:
See also (English)
- Walkthrough.
- Motivation for SynapseGrid.
- License (BSD-like).
- Subsystems.
- Blog about SynapseGrid
- Distrubuted systems
- Typed frames.
См. также (See also in Russian)
- README по-русски.
- Actors support (in Russian).
- Лицензия.
- Работа с подсистемами.
- Blog about SynapseGrid (en)
- Распределённые системы.
- Строго типизированные фреймы.
- Хабрахабр: Строго типизированное представление неполных данных