Runtime invariants

Some computations are runtime invariant. They can be computed on startup and remain constant throughout the execution of the program.

composite Main {
  param
    expression<int32> $x : (int32)getSubmissionTimeValue("x", "10");
  graph
    stream<int32 dummy> Beat = Beacon() {}
    stream<Beat> Filtered = Filter(Beat) { 
      param filter: $x < dummy; 
    } 
}
The compiler substitutes all occurrences of $x with the actual value:
composite Main {
  param
    expression<int32> $x : (int32)getSubmissionTimeValue("x", "10");
  graph
    stream<int32 dummy> Beat = Beacon() {}
    stream<Beat> Filtered = Filter(Beat) { 
      param filter: (int32)getSubmissionTimeValue("x", "10")  < dummy; 
    }
}
Each time the Filter operator receives a tuple, it evaluates the filter expression. It invokes (int32)getSubmissionTimeValue for each tuple received. Since (int32)getSubmissionTimeValue returns a runtime invariant result, you can invoke it once in a logic clause and capture its value in a local static variable. This technique is much more efficient since (int32)getSubmissionTimeValue is only invoked once instead of once per tuple:
composite Main {
  param
    expression<int32> $x : (int32)getSubmissionTimeValue("x", "10");
  graph
    stream<int32 dummy> Beat = Beacon() {}
    stream<Beat> Filtered = Filter(Beat) { 
      logic 
        state int32 x = $x; 
      param 
        filter: x < dummy; 
    } 
}