15.6 Aliasing in Stan Containers

Stan expressions are all evaluated before assignment happens, so there is no danger of so-called aliasing in array, vector, or matrix operations. Contrast the behavior of the assignments to u and x, which start with the same values.

The loop assigning to u and the compound slicing assigning to x.

the following trivial Stan program.

transformed data {
  vector[4] x = [ 1, 2, 3, 4 ]';
  vector[4] u = [ 1, 2, 3, 4 ]';

  for (t in 2:4)
    u[t] = u[t - 1] * 3;

  x[2:4] = x[1:3] * 3;

  print("u = ", u);
  print("x = ", x);
}

The output it produces is,

u = [1,3,9,27]
x = [1,3,6,9]

In the loop version assiging to u, the values are updated before being used to define subseqeunt values; in the sliced expression assigning to x, the entire right-hand side is evaluated before assigning to the left-hand side.