1
0
mirror of https://github.com/golang/go synced 2024-11-23 00:30:07 -07:00
go/doc/go1.3.html
Rob Pike 969dc7626b doc/go1.3.html: Performance, plus some library details
LGTM=dvyukov, iant, rsc
R=golang-codereviews, dvyukov, iant, rsc
CC=golang-codereviews
https://golang.org/cl/85250043
2014-04-09 07:12:20 +10:00

269 lines
7.9 KiB
HTML

<!--{
"Title": "Go 1.3 Release Notes",
"Path": "/doc/go1.3",
"Template": true
}-->
<h2 id="introduction">Introduction to Go 1.3</h2>
<p>
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 across the board,
and support for Google's Native Client architecture (NaCl).
As always, Go 1.3 keeps the <a href="/doc/go1compat.html">promise
of compatibility</a>,
and almost everything
will continue to compile and run without change when moved to 1.3.
</p>
<h2 id="os">Changes to the supported operating systems and architectures</h2>
<h3 id="nacl">Support for Native Client</h3>
<p>
TODO
</p>
<h3 id="solaris">Support for Solaris</h3>
<p>
TODO
</p>
<h3 id="windows2000">Removal of support for Windows 2000</h3>
<p>
Microsoft stopped supporting Windows 2000 in 2010.
Since it has <a href="https://codereview.appspot.com/74790043">implementation difficulties</a>
regarding exception handling (signals in Unix terminology),
as of Go 1.3 it is not supported by Go either.
</p>
<h2 id="memory">Changes to the memory model</h2>
<p>
The Go 1.3 memory model <a href="https://codereview.appspot.com/75130045">adds a new rule</a>
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.
</p>
<h2 id="impl">Changes to the implementations and tools</h2>
<h3 id="stacks">Stack</h3>
<p>
Go 1.3 has changed the implementation of goroutine stacks away from the old,
"segmented" model to a contiguous model.
When a goroutine needs more stack
than is available, its stack is transferred to a larger single block of memory.
The overhead of this transfer operation amortizes well and eliminates the old "hot spot"
problem when a calculation repeatedly steps across a segment boundary.
Details including performance numbers are in this
<a href="http://golang.org/s/contigstacks">design document</a>.
</p>
<h3 id="stack_size">Stack size</h3>
<p>
Go 1.2 increased the minimum stack size to 8 kilobytes; with the new stack model, it has been
put back to 4 kilobytes.
</p>
<p>
<em>Updating</em>: TODO
</p>
<h3 id="garbage_collector">Changes to the garbage collector</h3>
<p>
precision (TODO what to say)
liveness (TODO what to say)
</p>
<h3 id="liblink">The linker</h3>
<p>
TODO compiler/linker boundary moved
TODO: liblink: pull linker i/o into separate liblink C library (CL 35790044)
</p>
<p>
<em>Updating</em>: TODO
</p>
<h3 id="gccgo">Status of gccgo</h3>
<p>
TODO
</p>
<h3 id="gocmd">Changes to the go command</h3>
<p>
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)
</p>
<h3 id="misc">Miscellany</h3>
<ul>
<li> TODO: misc/benchcmp: removed and replaced by go.tools/cmd/benchcmp (CL 47980043)</li>
<li> TODO: misc/dist: renamed misc/makerelease (CL 39920043)</li>
</ul>
<h2 id="performance">Performance</h2>
<p>
The performance of Go binaries for this release has improved in many cases due to changes
in the runtime and garbage collection, plus some changes to libraries.
Significant instances include:
</p>
<ul>
<li>
As mentioned above, the default stack size has been reduced from 8 kilobytes to 4 kilobytes.
</li>
<li>
The runtime handles defers more efficiently, reducing the memory footprint by about two kilobytes
per goroutine that calls defer.
</li>
<li>
The garbage collector has been sped up, using a concurrent sweep algorithm,
better parallelization, and larger pages.
The cumulative effect can be a 50-70% reduction in collector pause time.
</li>
<li>
The race detector (see <a href="http://golang.org/doc/articles/race_detector.html">this guide</a>)
is now about 40% faster.
</li>
<li>
The regular expression package <a href="/pkg/regexp/"><code>regexp</code></a>
is now significantly faster for certain simple expressions due to the implemenation of
a second, one-pass execution engine. The choice of which engine to use is automatic;
the details are hidden from the user.
</li>
</ul>
<p>
Also, the runtime now includes in stack dumps how long a goroutine has been blocked,
which can be useful information when debugging deadlocks or performance issues.
</p>
<h2 id="library">Changes to the standard library</h2>
<h3 id="new_packages">New packages</h3>
<p>
No new packages appear in the core libraries in Go 1.3.
</p>
<h3 id="major_library_changes">Major changes to the library</h3>
<p>
There is an important new type added to the standard library: <a href="/pkg/sync/#Pool"><code>sync.Pool</code></a>.
It provides an efficient mechanism for implementing certain types of caches whose memory
can be reclaimed automatically by the system.
</p>
<p>
TODO: crypto/tls: ServerName or InsecureSkipVerify (CL 67010043)
possible breaking change
</p>
<h3 id="minor_library_changes">Minor changes to the library</h3>
<p>
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.
</p>
<ul>
<li>
The complex power function, <a href="/pkg/math/cmplx/#Pow"><code>Pow</code></a>,
now specifies the behavior when the first argument is zero. It was undefined before.
The details are in the <a href="/pkg/math/cmplx/#Pow">documentation for the function</a>.
</li>
<li> TODO: crypto/tls: add DialWithDialer (CL 68920045)</li>
<li> TODO: crypto/tls: report TLS version in ConnectionState (CL 68250043)</li>
<li> TODO: crypto/x509: support CSRs (CL 49830048)</li>
<li>
The formatted print functions of the <code>fmt</code> package now define <code>%F</code>
as a synonym for <code>%f</code> when printing floating-point values.
</li>
<li> TODO: net/http: add Request.TLS (CL 52660047)</li>
<li> TODO: net/http: add Server.ErrorLog; log and test TLS handshake errors (CL 70250044)</li>
<li> TODO: net/http: add Server.SetKeepAlivesEnabled (CL 69670043)</li>
<li> TODO: net/http: add Transport.TLSHandshakeTimeout; set it by default (CL 68150045)</li>
<li> TODO: net/http: add optional Server.ConnState callback (CL 69260044)</li>
<li> TODO: net/http: use TCP Keep-Alives on DefaultTransport's connections (CL 68330046)</li>
<li> TODO: net/http: use TCP keep-alives for ListenAndServe and ListenAndServeTLS (CL 48300043)</li>
<li> TODO: net: add Dialer.KeepAlive option (CL 68380043)</li>
<li> TODO: net: enable fast socket creation using SOCK_CLOEXEC and Accept4 on FreeBSD 10 (69100043)</li>
<li>
The <a href="/pkg/os/exec/"><code>os/exec</code></a> package now implements
what the documentation has always said with regard to relative paths for the binary.
In particular, it only calls <a href="/pkg/os/exec/#LookPath"><code>LookPath</code></a>
when the binary's file name contains no path separators.
</li>
<li>
The <a href="/pkg/strconv/#CanBackquote"><code>CanBackquote</code></a>
function in the <a href="/pkg/strconv/"><code>strconv</code></a> package
now considers the <code>DEL</code> character, <code>U+007F</code>, to be
non-printing.
</li>
<li> TODO: syscall: add Accept4 for freebsd (CL 68880043)</li>
<li> TODO: syscall: add NewCallbackCDecl to use for windows callbacks (CL 36180044)</li>
<li> TODO: syscall: add support for FreeBSD 10 (CL 56770044, 56980043)</li>
<li> TODO: testing: add b.RunParallel function (CL 57270043)</li>
<li>
The <a href="/pkg/testing/"><code>testing</code></a> package now
diagnoses tests that call <code>panic(nil)</code>, which is almost always erroneous.
</li>
<li>
The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated
support throughout the system has been upgraded from
Unicode 6.2.0 to <a href="http://www.unicode.org/versions/Unicode6.3.0/">Unicode 6.3.0</a>.
</li>
</ul>