Reporters should implement the Constant interface (which extends Pure) if they are truly constant, i.e., _constdouble, _conststring.
A stack trace is displayed to the user when an error occurs in running code.
A stack trace is displayed to the user when an error occurs in running code. Example:
division by zero error while observer running / called by plot 'plot 1' setup code called by RESET-TICKS called by procedure SETUP called by Command Center
Entries in stack traces can come from different places.
In the example, - "/" is the individual primitive in which the error occurred - "plot 'plot 1' setup code" is an anonymous procedure in a plot - "RESET-TICKS" is not a procedure, but a command that can trigger the execution of procedures (see also tick, setup-plots, update-plots) - "SETUP" is an ordinary procedure - "Command Center" is the display name of the dummy top level procedure wrapped around the user's code.
Reporters should implement the Constant interface (which extends Pure) if they are truly constant, i.e., _constdouble, _conststring.
They should implement the Pure interface if they are constant-preserving (i.e. the result is constant when all of their args are constant.)
The main point here is that this distinction allows us to compute some values at compile-time, rather than run-time.
Specifically, PureConstantOptimizer looks for reporters that are entirely pure. A reporter is "entirely pure" if it implements Pure, and all of it's children are "entirely pure". Entirely pure reporters get evaluated at compile time, and replaced with the appropriate constant reporter.
"Pure" reporters *must* not depend on "context", "workspace", "world", etc.