1 <!--{ 2 "Title": "Go 1.3 Release Notes", 3 "Path": "/doc/go1.3", 4 "Template": true 5 }--> 6 7 <h2 id="introduction">Introduction to Go 1.3</h2> 8 9 <p> 10 The latest Go release, version 1.3, arrives six months after 1.2, 11 and contains no language changes. 12 It focuses primarily on implementation work, providing 13 precise garbage collection, 14 a major refactoring of the compiler tool chain that results in 15 faster builds, especially for large projects, 16 significant performance improvements across the board, 17 and support for DragonFly BSD, Solaris, Plan 9 and Google's Native Client architecture (NaCl). 18 It also has an important refinement to the memory model regarding synchronization. 19 As always, Go 1.3 keeps the <a href="/doc/go1compat.html">promise 20 of compatibility</a>, 21 and almost everything 22 will continue to compile and run without change when moved to 1.3. 23 </p> 24 25 <h2 id="os">Changes to the supported operating systems and architectures</h2> 26 27 <h3 id="win2000">Removal of support for Windows 2000</h3> 28 29 <p> 30 Microsoft stopped supporting Windows 2000 in 2010. 31 Since it has <a href="https://codereview.appspot.com/74790043">implementation difficulties</a> 32 regarding exception handling (signals in Unix terminology), 33 as of Go 1.3 it is not supported by Go either. 34 </p> 35 36 <h3 id="dragonfly">Support for DragonFly BSD</h3> 37 38 <p> 39 Go 1.3 now includes experimental support for DragonFly BSD on the <code>amd64</code> (64-bit x86) and <code>386</code> (32-bit x86) architectures. 40 It uses DragonFly BSD 3.6 or above. 41 </p> 42 43 <h3 id="freebsd">Support for FreeBSD</h3> 44 45 <p> 46 It was not announced at the time, but since the release of Go 1.2, support for Go on FreeBSD 47 requires FreeBSD 8 or above. 48 </p> 49 50 <p> 51 As of Go 1.3, support for Go on FreeBSD requires that the kernel be compiled with the 52 <code>COMPAT_FREEBSD32</code> flag configured. 53 </p> 54 55 <p> 56 In concert with the switch to EABI syscalls for ARM platforms, Go 1.3 will run only on FreeBSD 10. 57 The x86 platforms, 386 and amd64, are unaffected. 58 </p> 59 60 <h3 id="nacl">Support for Native Client</h3> 61 62 <p> 63 Support for the Native Client virtual machine architecture has returned to Go with the 1.3 release. 64 It runs on the 32-bit Intel architectures (<code>GOARCH=386</code>) and also on 64-bit Intel, but using 65 32-bit pointers (<code>GOARCH=amd64p32</code>). 66 There is not yet support for Native Client on ARM. 67 Note that this is Native Client (NaCl), not Portable Native Client (PNaCl). 68 Details about Native Client are <a href="https://developers.google.com/native-client/dev/">here</a>; 69 how to set up the Go version is described <a href="//golang.org/wiki/NativeClient">here</a>. 70 </p> 71 72 <h3 id="netbsd">Support for NetBSD</h3> 73 74 <p> 75 As of Go 1.3, support for Go on NetBSD requires NetBSD 6.0 or above. 76 </p> 77 78 <h3 id="openbsd">Support for OpenBSD</h3> 79 80 <p> 81 As of Go 1.3, support for Go on OpenBSD requires OpenBSD 5.5 or above. 82 </p> 83 84 <h3 id="plan9">Support for Plan 9</h3> 85 86 <p> 87 Go 1.3 now includes experimental support for Plan 9 on the <code>386</code> (32-bit x86) architecture. 88 It requires the <code>Tsemacquire</code> syscall, which has been in Plan 9 since June, 2012. 89 </p> 90 91 <h3 id="solaris">Support for Solaris</h3> 92 93 <p> 94 Go 1.3 now includes experimental support for Solaris on the <code>amd64</code> (64-bit x86) architecture. 95 It requires illumos, Solaris 11 or above. 96 </p> 97 98 <h2 id="memory">Changes to the memory model</h2> 99 100 <p> 101 The Go 1.3 memory model <a href="https://codereview.appspot.com/75130045">adds a new rule</a> 102 concerning sending and receiving on buffered channels, 103 to make explicit that a buffered channel can be used as a simple 104 semaphore, using a send into the 105 channel to acquire and a receive from the channel to release. 106 This is not a language change, just a clarification about an expected property of communication. 107 </p> 108 109 <h2 id="impl">Changes to the implementations and tools</h2> 110 111 <h3 id="stacks">Stack</h3> 112 113 <p> 114 Go 1.3 has changed the implementation of goroutine stacks away from the old, 115 "segmented" model to a contiguous model. 116 When a goroutine needs more stack 117 than is available, its stack is transferred to a larger single block of memory. 118 The overhead of this transfer operation amortizes well and eliminates the old "hot spot" 119 problem when a calculation repeatedly steps across a segment boundary. 120 Details including performance numbers are in this 121 <a href="//golang.org/s/contigstacks">design document</a>. 122 </p> 123 124 <h3 id="garbage_collector">Changes to the garbage collector</h3> 125 126 <p> 127 For a while now, the garbage collector has been <em>precise</em> when examining 128 values in the heap; the Go 1.3 release adds equivalent precision to values on the stack. 129 This means that a non-pointer Go value such as an integer will never be mistaken for a 130 pointer and prevent unused memory from being reclaimed. 131 </p> 132 133 <p> 134 Starting with Go 1.3, the runtime assumes that values with pointer type 135 contain pointers and other values do not. 136 This assumption is fundamental to the precise behavior of both stack expansion 137 and garbage collection. 138 Programs that use <a href="/pkg/unsafe/">package unsafe</a> 139 to store integers in pointer-typed values are illegal and will crash if the runtime detects the behavior. 140 Programs that use <a href="/pkg/unsafe/">package unsafe</a> to store pointers 141 in integer-typed values are also illegal but more difficult to diagnose during execution. 142 Because the pointers are hidden from the runtime, a stack expansion or garbage collection 143 may reclaim the memory they point at, creating 144 <a href="//en.wikipedia.org/wiki/Dangling_pointer">dangling pointers</a>. 145 </p> 146 147 <p> 148 <em>Updating</em>: Code that uses <code>unsafe.Pointer</code> to convert 149 an integer-typed value held in memory into a pointer is illegal and must be rewritten. 150 Such code can be identified by <code>go vet</code>. 151 </p> 152 153 <h3 id="map">Map iteration</h3> 154 155 <p> 156 Iterations over small maps no longer happen in a consistent order. 157 Go 1 defines that “<a href="//golang.org/ref/spec#For_statements">The iteration order over maps 158 is not specified and is not guaranteed to be the same from one iteration to the next.</a>” 159 To keep code from depending on map iteration order, 160 Go 1.0 started each map iteration at a random index in the map. 161 A new map implementation introduced in Go 1.1 neglected to randomize 162 iteration for maps with eight or fewer entries, although the iteration order 163 can still vary from system to system. 164 This has allowed people to write Go 1.1 and Go 1.2 programs that 165 depend on small map iteration order and therefore only work reliably on certain systems. 166 Go 1.3 reintroduces random iteration for small maps in order to flush out these bugs. 167 </p> 168 169 <p> 170 <em>Updating</em>: If code assumes a fixed iteration order for small maps, 171 it will break and must be rewritten not to make that assumption. 172 Because only small maps are affected, the problem arises most often in tests. 173 </p> 174 175 <h3 id="liblink">The linker</h3> 176 177 <p> 178 As part of the general <a href="//golang.org/s/go13linker">overhaul</a> to 179 the Go linker, the compilers and linkers have been refactored. 180 The linker is still a C program, but now the instruction selection phase that 181 was part of the linker has been moved to the compiler through the creation of a new 182 library called <code>liblink</code>. 183 By doing instruction selection only once, when the package is first compiled, 184 this can speed up compilation of large projects significantly. 185 </p> 186 187 <p> 188 <em>Updating</em>: Although this is a major internal change, it should have no 189 effect on programs. 190 </p> 191 192 <h3 id="gccgo">Status of gccgo</h3> 193 194 <p> 195 GCC release 4.9 will contain the Go 1.2 (not 1.3) version of gccgo. 196 The release schedules for the GCC and Go projects do not coincide, 197 which means that 1.3 will be available in the development branch but 198 that the next GCC release, 4.10, will likely have the Go 1.4 version of gccgo. 199 </p> 200 201 <h3 id="gocmd">Changes to the go command</h3> 202 203 <p> 204 The <a href="/cmd/go/"><code>cmd/go</code></a> command has several new 205 features. 206 The <a href="/cmd/go/"><code>go run</code></a> and 207 <a href="/cmd/go/"><code>go test</code></a> subcommands 208 support a new <code>-exec</code> option to specify an alternate 209 way to run the resulting binary. 210 Its immediate purpose is to support NaCl. 211 </p> 212 213 <p> 214 The test coverage support of the <a href="/cmd/go/"><code>go test</code></a> 215 subcommand now automatically sets the coverage mode to <code>-atomic</code> 216 when the race detector is enabled, to eliminate false reports about unsafe 217 access to coverage counters. 218 </p> 219 220 <p> 221 The <a href="/cmd/go/"><code>go test</code></a> subcommand 222 now always builds the package, even if it has no test files. 223 Previously, it would do nothing if no test files were present. 224 </p> 225 226 <p> 227 The <a href="/cmd/go/"><code>go build</code></a> subcommand 228 supports a new <code>-i</code> option to install dependencies 229 of the specified target, but not the target itself. 230 </p> 231 232 <p> 233 Cross compiling with <a href="/cmd/cgo/"><code>cgo</code></a> enabled 234 is now supported. 235 The CC_FOR_TARGET and CXX_FOR_TARGET environment 236 variables are used when running all.bash to specify the cross compilers 237 for C and C++ code, respectively. 238 </p> 239 240 <p> 241 Finally, the go command now supports packages that import Objective-C 242 files (suffixed <code>.m</code>) through cgo. 243 </p> 244 245 <h3 id="cgo">Changes to cgo</h3> 246 247 <p> 248 The <a href="/cmd/cgo/"><code>cmd/cgo</code></a> command, 249 which processes <code>import "C"</code> declarations in Go packages, 250 has corrected a serious bug that may cause some packages to stop compiling. 251 Previously, all pointers to incomplete struct types translated to the Go type <code>*[0]byte</code>, 252 with the effect that the Go compiler could not diagnose passing one kind of struct pointer 253 to a function expecting another. 254 Go 1.3 corrects this mistake by translating each different 255 incomplete struct to a different named type. 256 </p> 257 258 <p> 259 Given the C declaration <code>typedef struct S T</code> for an incomplete <code>struct S</code>, 260 some Go code used this bug to refer to the types <code>C.struct_S</code> and <code>C.T</code> interchangeably. 261 Cgo now explicitly allows this use, even for completed struct types. 262 However, some Go code also used this bug to pass (for example) a <code>*C.FILE</code> 263 from one package to another. 264 This is not legal and no longer works: in general Go packages 265 should avoid exposing C types and names in their APIs. 266 </p> 267 268 <p> 269 <em>Updating</em>: Code confusing pointers to incomplete types or 270 passing them across package boundaries will no longer compile 271 and must be rewritten. 272 If the conversion is correct and must be preserved, 273 use an explicit conversion via <a href="/pkg/unsafe/#Pointer"><code>unsafe.Pointer</code></a>. 274 </p> 275 276 <h3 id="swig">SWIG 3.0 required for programs that use SWIG</h3> 277 278 <p> 279 For Go programs that use SWIG, SWIG version 3.0 is now required. 280 The <a href="/cmd/go"><code>cmd/go</code></a> command will now link the 281 SWIG generated object files directly into the binary, rather than 282 building and linking with a shared library. 283 </p> 284 285 <h3 id="gc_flag">Command-line flag parsing</h3> 286 287 <p> 288 In the gc tool chain, the assemblers now use the 289 same command-line flag parsing rules as the Go flag package, a departure 290 from the traditional Unix flag parsing. 291 This may affect scripts that invoke the tool directly. 292 For example, 293 <code>go tool 6a -SDfoo</code> must now be written 294 <code>go tool 6a -S -D foo</code>. 295 (The same change was made to the compilers and linkers in <a href="/doc/go1.1#gc_flag">Go 1.1</a>.) 296 </p> 297 298 <h3 id="godoc">Changes to godoc</h3> 299 <p> 300 When invoked with the <code>-analysis</code> flag, 301 <a href="//godoc.org/golang.org/x/tools/cmd/godoc">godoc</a> 302 now performs sophisticated <a href="/lib/godoc/analysis/help.html">static 303 analysis</a> of the code it indexes. 304 The results of analysis are presented in both the source view and the 305 package documentation view, and include the call graph of each package 306 and the relationships between 307 definitions and references, 308 types and their methods, 309 interfaces and their implementations, 310 send and receive operations on channels, 311 functions and their callers, and 312 call sites and their callees. 313 </p> 314 315 <h3 id="misc">Miscellany</h3> 316 317 <p> 318 The program <code>misc/benchcmp</code> that compares 319 performance across benchmarking runs has been rewritten. 320 Once a shell and awk script in the main repository, it is now a Go program in the <code>go.tools</code> repo. 321 Documentation is <a href="//godoc.org/golang.org/x/tools/cmd/benchcmp">here</a>. 322 </p> 323 324 <p> 325 For the few of us that build Go distributions, the tool <code>misc/dist</code> has been 326 moved and renamed; it now lives in <code>misc/makerelease</code>, still in the main repository. 327 </p> 328 329 <h2 id="performance">Performance</h2> 330 331 <p> 332 The performance of Go binaries for this release has improved in many cases due to changes 333 in the runtime and garbage collection, plus some changes to libraries. 334 Significant instances include: 335 </p> 336 337 <ul> 338 339 <li> 340 The runtime handles defers more efficiently, reducing the memory footprint by about two kilobytes 341 per goroutine that calls defer. 342 </li> 343 344 <li> 345 The garbage collector has been sped up, using a concurrent sweep algorithm, 346 better parallelization, and larger pages. 347 The cumulative effect can be a 50-70% reduction in collector pause time. 348 </li> 349 350 <li> 351 The race detector (see <a href="/doc/articles/race_detector.html">this guide</a>) 352 is now about 40% faster. 353 </li> 354 355 <li> 356 The regular expression package <a href="/pkg/regexp/"><code>regexp</code></a> 357 is now significantly faster for certain simple expressions due to the implementation of 358 a second, one-pass execution engine. 359 The choice of which engine to use is automatic; 360 the details are hidden from the user. 361 </li> 362 363 </ul> 364 365 <p> 366 Also, the runtime now includes in stack dumps how long a goroutine has been blocked, 367 which can be useful information when debugging deadlocks or performance issues. 368 </p> 369 370 <h2 id="library">Changes to the standard library</h2> 371 372 <h3 id="new_packages">New packages</h3> 373 374 <p> 375 A new package <a href="/pkg/debug/plan9obj/"><code>debug/plan9obj</code></a> was added to the standard library. 376 It implements access to Plan 9 <a href="http://plan9.bell-labs.com/magic/man2html/6/a.out">a.out</a> object files. 377 </p> 378 379 <h3 id="major_library_changes">Major changes to the library</h3> 380 381 <p> 382 A previous bug in <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> 383 made it possible to skip verification in TLS inadvertently. 384 In Go 1.3, the bug is fixed: one must specify either ServerName or 385 InsecureSkipVerify, and if ServerName is specified it is enforced. 386 This may break existing code that incorrectly depended on insecure 387 behavior. 388 </p> 389 390 <p> 391 There is an important new type added to the standard library: <a href="/pkg/sync/#Pool"><code>sync.Pool</code></a>. 392 It provides an efficient mechanism for implementing certain types of caches whose memory 393 can be reclaimed automatically by the system. 394 </p> 395 396 <p> 397 The <a href="/pkg/testing/"><code>testing</code></a> package's benchmarking helper, 398 <a href="/pkg/testing/#B"><code>B</code></a>, now has a 399 <a href="/pkg/testing/#B.RunParallel"><code>RunParallel</code></a> method 400 to make it easier to run benchmarks that exercise multiple CPUs. 401 </p> 402 403 <p> 404 <em>Updating</em>: The crypto/tls fix may break existing code, but such 405 code was erroneous and should be updated. 406 </p> 407 408 <h3 id="minor_library_changes">Minor changes to the library</h3> 409 410 <p> 411 The following list summarizes a number of minor changes to the library, mostly additions. 412 See the relevant package documentation for more information about each change. 413 </p> 414 415 <ul> 416 417 <li> In the <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package, 418 a new <a href="/pkg/crypto/tls/#DialWithDialer"><code>DialWithDialer</code></a> 419 function lets one establish a TLS connection using an existing dialer, making it easier 420 to control dial options such as timeouts. 421 The package also now reports the TLS version used by the connection in the 422 <a href="/pkg/crypto/tls/#ConnectionState"><code>ConnectionState</code></a> 423 struct. 424 </li> 425 426 <li> The <a href="/pkg/crypto/x509/#CreateCertificate"><code>CreateCertificate</code></a> 427 function of the <a href="/pkg/crypto/tls/"><code>crypto/tls</code></a> package 428 now supports parsing (and elsewhere, serialization) of PKCS #10 certificate 429 signature requests. 430 </li> 431 432 <li> 433 The formatted print functions of the <code>fmt</code> package now define <code>%F</code> 434 as a synonym for <code>%f</code> when printing floating-point values. 435 </li> 436 437 <li> 438 The <a href="/pkg/math/big/"><code>math/big</code></a> package's 439 <a href="/pkg/math/big/#Int"><code>Int</code></a> and 440 <a href="/pkg/math/big/#Rat"><code>Rat</code></a> types 441 now implement 442 <a href="/pkg/encoding/#TextMarshaler"><code>encoding.TextMarshaler</code></a> and 443 <a href="/pkg/encoding/#TextUnmarshaler"><code>encoding.TextUnmarshaler</code></a>. 444 </li> 445 446 <li> 447 The complex power function, <a href="/pkg/math/cmplx/#Pow"><code>Pow</code></a>, 448 now specifies the behavior when the first argument is zero. 449 It was undefined before. 450 The details are in the <a href="/pkg/math/cmplx/#Pow">documentation for the function</a>. 451 </li> 452 453 <li> 454 The <a href="/pkg/net/http/"><code>net/http</code></a> package now exposes the 455 properties of a TLS connection used to make a client request in the new 456 <a href="/pkg/net/http/#Response"><code>Response.TLS</code></a> field. 457 </li> 458 459 <li> 460 The <a href="/pkg/net/http/"><code>net/http</code></a> package now 461 allows setting an optional server error logger 462 with <a href="/pkg/net/http/#Server"><code>Server.ErrorLog</code></a>. 463 The default is still that all errors go to stderr. 464 </li> 465 466 <li> 467 The <a href="/pkg/net/http/"><code>net/http</code></a> package now 468 supports disabling HTTP keep-alive connections on the server 469 with <a href="/pkg/net/http/#Server.SetKeepAlivesEnabled"><code>Server.SetKeepAlivesEnabled</code></a>. 470 The default continues to be that the server does keep-alive (reuses 471 connections for multiple requests) by default. 472 Only resource-constrained servers or those in the process of graceful 473 shutdown will want to disable them. 474 </li> 475 476 <li> 477 The <a href="/pkg/net/http/"><code>net/http</code></a> package adds an optional 478 <a href="/pkg/net/http/#Transport"><code>Transport.TLSHandshakeTimeout</code></a> 479 setting to cap the amount of time HTTP client requests will wait for 480 TLS handshakes to complete. 481 It's now also set by default 482 on <a href="/pkg/net/http#DefaultTransport"><code>DefaultTransport</code></a>. 483 </li> 484 485 <li> 486 The <a href="/pkg/net/http/"><code>net/http</code></a> package's 487 <a href="/pkg/net/http/#DefaultTransport"><code>DefaultTransport</code></a>, 488 used by the HTTP client code, now 489 enables <a href="http://en.wikipedia.org/wiki/Keepalive#TCP_keepalive">TCP 490 keep-alives</a> by default. 491 Other <a href="/pkg/net/http/#Transport"><code>Transport</code></a> 492 values with a nil <code>Dial</code> field continue to function the same 493 as before: no TCP keep-alives are used. 494 </li> 495 496 <li> 497 The <a href="/pkg/net/http/"><code>net/http</code></a> package 498 now enables <a href="http://en.wikipedia.org/wiki/Keepalive#TCP_keepalive">TCP 499 keep-alives</a> for incoming server requests when 500 <a href="/pkg/net/http/#ListenAndServe"><code>ListenAndServe</code></a> 501 or 502 <a href="/pkg/net/http/#ListenAndServeTLS"><code>ListenAndServeTLS</code></a> 503 are used. 504 When a server is started otherwise, TCP keep-alives are not enabled. 505 </li> 506 507 <li> 508 The <a href="/pkg/net/http/"><code>net/http</code></a> package now 509 provides an 510 optional <a href="/pkg/net/http/#Server"><code>Server.ConnState</code></a> 511 callback to hook various phases of a server connection's lifecycle 512 (see <a href="/pkg/net/http/#ConnState"><code>ConnState</code></a>). 513 This can be used to implement rate limiting or graceful shutdown. 514 </li> 515 516 <li> 517 The <a href="/pkg/net/http/"><code>net/http</code></a> package's HTTP 518 client now has an 519 optional <a href="/pkg/net/http/#Client"><code>Client.Timeout</code></a> 520 field to specify an end-to-end timeout on requests made using the 521 client. 522 </li> 523 524 <li> 525 The <a href="/pkg/net/http/"><code>net/http</code></a> package's 526 <a href="/pkg/net/http/#Request.ParseMultipartForm"><code>Request.ParseMultipartForm</code></a> 527 method will now return an error if the body's <code>Content-Type</code> 528 is not <code>mutipart/form-data</code>. 529 Prior to Go 1.3 it would silently fail and return <code>nil</code>. 530 Code that relies on the previous behavior should be updated. 531 </li> 532 533 <li> In the <a href="/pkg/net/"><code>net</code></a> package, 534 the <a href="/pkg/net/#Dialer"><code>Dialer</code></a> struct now 535 has a <code>KeepAlive</code> option to specify a keep-alive period for the connection. 536 </li> 537 538 <li> 539 The <a href="/pkg/net/http/"><code>net/http</code></a> package's 540 <a href="/pkg/net/http/#Transport"><code>Transport</code></a> 541 now closes <a href="/pkg/net/http/#Request"><code>Request.Body</code></a> 542 consistently, even on error. 543 </li> 544 545 <li> 546 The <a href="/pkg/os/exec/"><code>os/exec</code></a> package now implements 547 what the documentation has always said with regard to relative paths for the binary. 548 In particular, it only calls <a href="/pkg/os/exec/#LookPath"><code>LookPath</code></a> 549 when the binary's file name contains no path separators. 550 </li> 551 552 <li> 553 The <a href="/pkg/reflect/#Value.SetMapIndex"><code>SetMapIndex</code></a> 554 function in the <a href="/pkg/reflect/"><code>reflect</code></a> package 555 no longer panics when deleting from a <code>nil</code> map. 556 </li> 557 558 <li> 559 If the main goroutine calls 560 <a href="/pkg/runtime/#Goexit"><code>runtime.Goexit</code></a> 561 and all other goroutines finish execution, the program now always crashes, 562 reporting a detected deadlock. 563 Earlier versions of Go handled this situation inconsistently: most instances 564 were reported as deadlocks, but some trivial cases exited cleanly instead. 565 </li> 566 567 <li> 568 The runtime/debug package now has a new function 569 <a href="/pkg/runtime/debug/#WriteHeapDump"><code>debug.WriteHeapDump</code></a> 570 that writes out a description of the heap. 571 </li> 572 573 <li> 574 The <a href="/pkg/strconv/#CanBackquote"><code>CanBackquote</code></a> 575 function in the <a href="/pkg/strconv/"><code>strconv</code></a> package 576 now considers the <code>DEL</code> character, <code>U+007F</code>, to be 577 non-printing. 578 </li> 579 580 <li> 581 The <a href="/pkg/syscall/"><code>syscall</code></a> package now provides 582 <a href="/pkg/syscall/#SendmsgN"><code>SendmsgN</code></a> 583 as an alternate version of 584 <a href="/pkg/syscall/#Sendmsg"><code>Sendmsg</code></a> 585 that returns the number of bytes written. 586 </li> 587 588 <li> 589 On Windows, the <a href="/pkg/syscall/"><code>syscall</code></a> package now 590 supports the cdecl calling convention through the addition of a new function 591 <a href="/pkg/syscall/#NewCallbackCDecl"><code>NewCallbackCDecl</code></a> 592 alongside the existing function 593 <a href="/pkg/syscall/#NewCallback"><code>NewCallback</code></a>. 594 </li> 595 596 <li> 597 The <a href="/pkg/testing/"><code>testing</code></a> package now 598 diagnoses tests that call <code>panic(nil)</code>, which are almost always erroneous. 599 Also, tests now write profiles (if invoked with profiling flags) even on failure. 600 </li> 601 602 <li> 603 The <a href="/pkg/unicode/"><code>unicode</code></a> package and associated 604 support throughout the system has been upgraded from 605 Unicode 6.2.0 to <a href="http://www.unicode.org/versions/Unicode6.3.0/">Unicode 6.3.0</a>. 606 </li> 607 608 </ul> 609