Skip to main content

Design principles

In order to create a meaningful new computation system that takes time into account RtBot has been designed according to the following principles:

Causality. Only the past can determine the future. Internally it is assumed that operators can only receive messages ordered in time. In real life, data providers may not guarantee this and it can be possible that two messages with the same timestamp are received. For this case we have an special operator: Input whose only responsibility is that the operators behind it receive messages with an increasing timestamp, discarding input data if necessary.

Deterministic. Same input produces the same output. Here input and output refers to entire message streams and not to individual messages. If we start our program and feed a list of messages we expect to get the same list of output messages. Now in order to guarantee this at the program level we impose this at the operator level, which means that the output of the operator shall not depend on when its inputs arrive. For many operators this is trivial, like for example the MovingAverage one, but for certain operators, specially those that perform synchronization among different streams of messages, this implies constraints on its outputs.

Declarative. The behavior of the program is determined by the operators and how they are connected. In other words, the behavior of the program shall not be determined by in which order operators were connected but solely by the topology of the graph of operators.