diff options
author | Russ Cox <rsc@golang.org> | 2014-05-16 12:15:21 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2014-05-16 12:15:21 -0400 |
commit | d1f627f2f3f6fc22ed64e1cc7b17eefca952224b (patch) | |
tree | 641c8e698e82dd9d0315197ba13e9abe2b02dcf8 | |
parent | 23e8c0d28135f9d22af1c3ad0ab7fcef7632a22f (diff) | |
download | go-d1f627f2f3f6fc22ed64e1cc7b17eefca952224b.tar.gz go-d1f627f2f3f6fc22ed64e1cc7b17eefca952224b.zip |
doc/go1.3.html: add note about small map iteration order
LGTM=r
R=r
CC=golang-codereviews
https://golang.org/cl/98290048
-rw-r--r-- | doc/go1.3.html | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/doc/go1.3.html b/doc/go1.3.html index bf72a052e7..c7f0d43e03 100644 --- a/doc/go1.3.html +++ b/doc/go1.3.html @@ -137,6 +137,28 @@ to <code>unsafe.Pointer</code> is illegal and must be rewritten. Such code can be identified by <code>go vet</code>. </p> +<h3 id="map">Map iteration</h3> + +<p> +Iterations over small maps no longer happen in a consistent order. +Go 1 defines that “<a href="http://golang.org/ref/spec#For_statements">The iteration order over maps +is not specified and is not guaranteed to be the same from one iteration to the next.</a>” +To keep code from depending on map iteration order, +Go 1.0 started each map iteration at a random index in the map. +A new map implementation introduced in Go 1.1 neglected to randomize +iteration for maps with eight or fewer entries, although the iteration order +can still vary from system to system. +This has allowed people to write Go 1.1 and Go 1.2 programs that +depend on small map iteration order and therefore only work reliably on certain systems. +Go 1.3 reintroduces random iteration for small maps in order to flush out these bugs. +</p> + +<p> +<em>Updating</em>: If code assumes a fixed iteration order for small maps, +it will break and must be rewritten not to make that assumption. +Because only small maps are affected, the problem arises most often in tests. +</p> + <h3 id="liblink">The linker</h3> <p> |