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)
The linker
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
- TODO: misc/benchcmp: removed and replaced by go.tools/cmd/benchcmp (CL 47980043)
- TODO: misc/dist: renamed misc/makerelease (CL 39920043)
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.
- TODO: cmplx.Pow(0, x): https://codereview.appspot.com/76940044
- TODO: crypto/tls: ServerName or InsecureSkipVerify (CL 67010043)
- TODO: crypto/tls: add DialWithDialer (CL 68920045)
- TODO: crypto/tls: report TLS version in ConnectionState (CL 68250043)
- TODO: crypto/x509: support CSRs (CL 49830048)
- TODO: fmt %F: 77580044
- TODO: liblink: pull linker i/o into separate liblink C library (CL 35790044)
- TODO: net/http: add Request.TLS (CL 52660047)
- TODO: net/http: add Server.ErrorLog; log and test TLS handshake errors (CL 70250044)
- TODO: net/http: add Server.SetKeepAlivesEnabled (CL 69670043)
- TODO: net/http: add Transport.TLSHandshakeTimeout; set it by default (CL 68150045)
- TODO: net/http: add optional Server.ConnState callback (CL 69260044)
- TODO: net/http: use TCP Keep-Alives on DefaultTransport's connections (CL 68330046)
- TODO: net/http: use TCP keep-alives for ListenAndServe and ListenAndServeTLS (CL 48300043)
- TODO: net: add Dialer.KeepAlive option (CL 68380043)
- TODO: net: enable fast socket creation using SOCK_CLOEXEC and Accept4 on FreeBSD 10 (69100043)
- TODO: os/exec: fix Command with relative paths (CL 59580044)
- TODO: regexp: add one-pass optimization from RE2 (CL 13345046)
- TODO: runtime/debug: add SetPanicOnFault (CL 66590044)
- TODO: runtime: output how long goroutines are blocked (CL 50420043)
- TODO: runtime: better handling of defers, reduces goroutine memory footprint by 2K (CL 42750044)
- TODO: runtime: faster GC: concurrent sweep, better parallelization, 8K pages (up to 50-70% pause reduction) (CL 46430043, 46860043, 58230043)
- TODO: runtime/race: faster by ~40% (CL 55100044)
- TODO: strconv.CanBackquote rejects U+007F CL 77300043
- TODO: syscall: add Accept4 for freebsd (CL 68880043)
- TODO: syscall: add NewCallbackCDecl to use for windows callbacks (CL 36180044)
- TODO: syscall: add support for FreeBSD 10 (CL 56770044, 56980043)
- TODO: testing: add b.RunParallel function (CL 57270043)
- TODO: testing: diagnose buggy tests that panic(nil) (CL 55780043)
- TODO: unicode: upgrade from Unicode 6.2.0 to 6.3.0 (CL 65400044)