sciss / lucreevent

GitHub

A reactive event and observer layer for LucreSTM

LucreEvent

Build Status Maven Central

statement

LucreEvent provides a reactive event and observer layer for LucreSTM, a software transactional memory and persistence library for the Scala programming language. The reactive system implements event graphs which also can be persistent, along with live observers. A sub module adds an provides an expression tree system.

LucreEvent is (C)opyright 2011–2015 by Hanns Holger Rutz. All rights reserved. It is released under the GNU Lesser General Public License v2.1+ and comes with absolutely no warranties. To contact the author, send an email to contact at sciss.de

Further reading:

  • Rutz, H.H., "A Reactive, Confluently Persistent Framework for the Design of Computer Music Systems," in Proceedings of the 9th Sound and Music Computing Conference (SMC), Copenhagen 2012.
  • Gasiunas, V. and Satabin, L. and Mezini, M. and Núñez, A. and Noyé, J., "EScala: Modular Event-Driven Object Interactions in Scala," in Proceedings of the tenth international conference on Aspect-oriented software development, pp. 227--240, 2011.

requirements / installation

LucreEvent builds with sbt 0.13 against Scala 2.11, 2.10. It depends on LucreSTM and on LucreData which should be automatically found by sbt.

linking

The projects is divided into a core module (just the event layer) and an expr module (the expression tree layer). The following dependency is necessary:

"de.sciss" %% "lucreevent" % v

Or for each layer:

"de.sciss" %% "lucreevent-core"     % v
"de.sciss" %% "lucreevent-expr"     % v
"de.sciss" %% "lucreevent-artifact" % v

Note that expr requires the following additional resolver:

resolvers += "Oracle Repository" at "http://download.oracle.com/maven"

The current version v is "2.7.5".

documentation

At the moment, there are only sparse API documentation, which is generated by sbt doc. The basic concept:

TODO!

  • The system distinguishes between persisted and live references (even with a pure in-memory system), where a change in an observed object is propagated through a mechanism called 'tunnelling', pushing along stub nodes until a live node is found, which in turn evaluates the path in pull fashion.