View on GitHub


A C++ Embedded Language for Event Stream Processing

Download this project as a .zip file Download this project as a tar.gz file

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.

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.

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).


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


Streamulus relies on the Boost Proto library. I am grateful to Joel Falcou for his ongoing assistance and feedback.

Irit Katriel