]> Cypherpunks repositories - gostls13.git/commit
spec: specify variable initialization order explicitly
authorRobert Griesemer <gri@golang.org>
Mon, 29 Sep 2014 19:44:50 +0000 (12:44 -0700)
committerRobert Griesemer <gri@golang.org>
Mon, 29 Sep 2014 19:44:50 +0000 (12:44 -0700)
commit259f0ffade606f121bb99884371693ed1aef2841
tree83689acd1e9aa10a3505b1ba5346725d5e8190a0
parentdfddd802ace3aece85985dcd4b16e2488f287477
spec: specify variable initialization order explicitly

The existing spec rules on package initialization were
contradictory: They specified that 1) dependent variables
are initialized in dependency order, and 2) independent
variables are initialized in declaration order. This 2nd
rule cannot be satisfied in general. For instance, for

var (
        c = b + 2
        a = 0
        b = 1
)

because of its dependency on b, c must be initialized after b,
leading to the partial order b, c. Because a is independent of
b but is declared before b, we end up with the order: a, b, c.
But a is also independent of c and is declared after c, so the
order b, c, a should also be valid in contradiction to a, b, c.

The new rules are given in form of an algorithm which outlines
initialization order explicitly.

gccgo and go/types already follow these rules.

Fixes #8485.

LGTM=iant, r, rsc
R=r, rsc, iant, ken, gordon.klaus, adonovan
CC=golang-codereviews
https://golang.org/cl/142880043
doc/go_spec.html