According to the specification section 2.4:
The syntax @name MUST form a pointer literal, where @ is a dedicated lexical token and name is an identifier resolved in the current lexical environment.
And according to the specification section 5.4:
The language's pointer mechanism MUST create an alias to an existing visible binding. Pointer creation MUST resolve any existing pointer chain so the new pointer refers to the underlying non-pointer target. Reading through a symbol bound to a pointer MUST behave as an ordinary dereference, so plain reads yield the pointed-to value.
Assigning through a symbol whose current binding is a pointer MUST update the pointed-to target rather than replace the pointer object.
This implies that passing a pointer to an operator which creates a derivative of the argument (such as JOIN) mutates the pointer. In the implementation, however, only a small number of operators implement pointer mutation.
In addition to making all operators that create a derivative of it's arguments mutate pointer args, explicitly state this in the specification.
According to the specification section 2.4:
And according to the specification section 5.4:
This implies that passing a pointer to an operator which creates a derivative of the argument (such as
JOIN) mutates the pointer. In the implementation, however, only a small number of operators implement pointer mutation.In addition to making all operators that create a derivative of it's arguments mutate pointer args, explicitly state this in the specification.