Two possible solutions to the problem
Write the language definition to disallow functional side effects
No two-way parameters in functions
No non-local references in functions
Advantage: it works!
Disadvantage: inflexibility of one-way parameters and lack of non-local references
Write the language definition to demand that operand evaluation order be fixed
Disadvantage: limits some compiler optimizations
Java requires that operands appear to be evaluated in left-to-right order