github.com/riscv/riscv-go@v0.0.0-20200123204226-124ebd6fcc8e/doc/go1.3.html (about)

     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 &ldquo;<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>&rdquo;
   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>