Introduction to Go 1.3

The latest Go release, version 1.3, arrives six months after 1.2, and contains no language changes. It does have some important developments, though, including a refinement to the memory model regarding synchronization, precise garbage collection, significant performance improvements, including TODO, and support for Google's Native Client architecture (NaCl). As always, Go 1.3 keeps the promise of compatibility, and almost everything will continue to compile and run without change when moved to 1.3.

Changes to the supported operating systems and architectures

Support for Native Client

TODO

Support for Solaris

TODO

Removal of support for Windows 2000

TODO windows 2000 removed (CL 74790043)

Changes to the memory model

The Go 1.3 memory model adds a new rule concerning sending and receiving on buffered channels, to make explicit that a buffered channel can be used as a simple semaphore, using a send into the channel to acquire and a receive from the channel to release. This is not a language change, just a clarification about an expected property of communication.

Changes to the implementations and tools

Stack

TODO stack copying, no longer segmented

Stack size

Go 1.2 increased the minimum stack size to 8 kilobytes; with the new stack model, it has been put back to 4 kilobytes.

Updating: TODO

Changes to the garbage collector

precision (TODO what to say) liveness (TODO what to say)

TODO compiler/linker boundary moved

Updating: TODO

Status of gccgo

TODO

Changes to the go command

TODO cmd/go, go/build: support .m files (CL 60590044) cmd/go: add -exec to 'go run' and 'go test' (CL 68580043) cmd/go: cover -atomic for -race (CL 76370043)

Miscellany

Performance

TODO

Changes to the standard library

TODO: Which should be called out?

New packages

There is one new package added to the standard library: sync/pool. TODO: sync: add Pool (CL 41860043, 46010043)

Minor changes to the library

The following list summarizes a number of minor changes to the library, mostly additions. See the relevant package documentation for more information about each change.