Streamulus is a C++ library that makes it very easy to process
event streams. You need to write code that handles a single
event and the library turns this code into a data structure
that handles infinite streams of such events. The stream
operators you write can have side effects and they can
maintain an internal state. An
example is worth a thousand words.
Motivation
Continuous computations are not easy to write and maintain in a
procedural language like C++. This blog
post describes some of the problems that Streamulus
solves.Several previously existing stream processing systems chose to support a version of StreamSQL, which is a domain-specific language based on SQL but adapted to streams. Like SQL, it can be learned and used by non-programmers.
Streamulus takes a different approach to the stream processing problem, which may appeal to those of us who are programmers. By embedding the stream computations in C++, we end up with a highly expressive language. Streamulus uses template metaprogramming (TMP) techniques to transform simple expressions into a powerful stream-processing data structure during compilation time. This means that we are processing the expressions early enough to apply optimizations that are not possible at runtime. Version 0.1 barely scrapes the surface of what TMP can do. So far only the basic functionality has been implemented, but there is much more to come. Future releases will include optimisations that will significantly improve the efficiency of the data structure.
Status
Streamulus is open sourced on github under the GNU v3 licence.
Follow the project on github to participate, or just follow @streamulus on twitter for updates (releases, documentation, etc).
Resources
The Streamulus
Blog is where you can find in-depth information about
the project.
The code contains some examples that demonstrate usage of Streamulus.
Slides from an academic seminar can be found here.
Thanks
Streamulus relies on the Boost Proto library. I am grateful to Joel Falcou for his ongoing assistance and feedback.
Irit Katriel
firstnamelastname@yahoo.com