On Tue, Mar 21, 2017 at 10:38 AM, Paul Jolly <p...@myitcv.org.uk> wrote:
>> The problem was that I repeatedly mentally misread 'indexing' for 'index
>> evaluation'. As the index is a constant in this case, it lead me to believe
>> it cannot have any effect on the result. But it's the 'indexing', the actual
>> time when the value is loaded using the index, which is exempt from the
>> 'left-to-right' evaluation rule for operands.
>
>
> I actually read the following part of the spec:
>
>> Otherwise, when evaluating the operands of an expression, assignment, or
>> return statement, all function calls, method calls, and communication
>> operations are evaluated in lexical left-to-right order.
>
>
> and inferred "when evaluating the operands of an expression, assignment, or
> return statement" every expression that is not a "function call, method call
> or communication operation" has an undefined order of evaluation, including
> (as the later paragraph clarifies) index expressions.
>
> Consider for example:
>
> https://play.golang.org/p/xGaEDjTuzw
>
> To my understanding, it is undefined when "j-1" evaluates, hence that code
> _might_ panic.
>
> But maybe I read/inferred that incorrectly?

You are correct.  The evaluation of `j`--the actual load of the value
from the global variable--may take place before or after the call to
`foo2`.

Ian

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to