From 8114a855da66750ebebfe4bcaf3516b688c375c0 Mon Sep 17 00:00:00 2001
From: Russ Cox
The latest Go release, version 1.10, arrives six months after go1.9.
Most of its changes are in the implementation of the toolchain, runtime, and libraries.
@@ -141,8 +151,8 @@ The new build cache makes future commands still run as quickly as if the
dependencies had been installed.
To force the installation of dependencies, use the new
go install -i flag.
-Installing dependencies should not be necessary in general,
-and the very concept or installed packages may disappear in a future release.
+Installing dependency packages should not be necessary in general,
+and the very concept of installed packages may disappear in a future release.
@@ -208,7 +218,7 @@ merging most of the time.
The go test -v output
now includes PAUSE and CONT status update
-lines to make clearer when parallel tests pause and continue.
+lines to mark when parallel tests pause and continue.
@@ -320,13 +330,14 @@ without the binary that produced the profile.
The go tool pprof profile visualizer has been updated to
-the latest version from github.com/google/pprof.
+the latest version from github.com/google/pprof,
+which includes an updated web interface.
-The go vet command now always has access to
+The go vet command now always has access to
complete, up-to-date type information when checking packages, even for packages using cgo or vendored imports.
The reports should be more accurate as a result.
Note that only go vet has access to this information;
@@ -386,9 +397,10 @@ spread fairly evenly across the supported architectures.
-TODO: What to say about DWARF work, if anything? -Global constants (CL 61019), variable decomposition (CL 50878), variable liveness and location lists (CL 41770), more? -What is enabled by default? +The DWARF debug information recorded in binaries has been improved in a few ways: +constant values are now recorded; +line number information is more accurate, making source-level stepping through a program work better; +and each package is now presented as its own DWARF compilation unit.
@@ -493,8 +505,8 @@ instructions.
-For the X86 64-bit port, the assembler now supports 359 new instructions
-and is believed to be complete up to and including the Intel AVX-256 extensions.
+For the X86 64-bit port, the assembler now supports 359 new instructions,
+including the full AVX, AVX2, BMI, BMI2, F16C, FMA3, SSE2, SSE3, SSSE3, SSE4.1, and SSE4.2 extension sets.
The assembler also no longer implements MOVL $0, AX
as an XORL instruction,
to avoid clearing the condition flags unexpectedly.
@@ -509,12 +521,35 @@ TODO: Words about GCC 8 and Go 1.10.
-TODO: Don't start new threads from locked threads or threads that Go did not create. LockOSThread/UnlockOSThread now nest. LockOSThread + return kills the thread
+The behavior of nested calls to
+LockOSThread and
+UnlockOSThread
+has changed.
+These functions control whether a goroutine is locked to a specific operating system thread,
+so that the goroutine only runs on that thread, and the thread only runs that goroutine.
+Previously, calling LockOSThread more than once in a row
+was equivalent to calling it once, and a single UnlockOSThread
+always unlocked the thread.
+Now, the calls nest: if LockOSThread is called multiple times,
+UnlockOSThread must be called the same number of times
+in order to unlock the thread.
+Existing code that was careful not to nest these calls will remain correct.
+Existing code that incorrectly assumed the calls nested will become correct.
+Most uses of these functions in public Go source falls into the second category.
+
+Because one common use of LockOSThread and UnlockOSThread
+is to allow Go code to reliably modify thread-local state (for example, Linux or Plan 9 name spaces),
+the runtime now treats locked threads as unsuitable for reuse or for creating new threads.
Stack traces no longer include implicit wrapper functions (previously marked <autogenerated>),
unless a fault or panic happens in the wrapper itself.
+As a result, skip counts passed to functions like Caller
+should now always match the structure of the code as written, rather than depending on
+optimization decisions and implementation details.
@@ -534,7 +569,7 @@ better generated code, and optimizations in the core library.
-TODO: Anything? +Many applications should experience significantly lower allocation latency and overall performance overhead when the garbage collector is active.
Header.Format field
of type Format
controls which tar header format the Writer uses.
The default, as before, is to select the most widely-supported header type
-that can encoding the fields needed by the header (USTAR if possible, or else PAX if possible, or else GNU).
+that can encode the fields needed by the header (USTAR if possible, or else PAX if possible, or else GNU).
The Reader sets Header.Format for each header it reads.
-Reader and the Writer now support PAX records,
-using the new Header.PAXRecords field.
+Reader and the Writer now support arbitrary PAX records,
+using the new Header.PAXRecords field,
+a generalization of the existing Xattrs field.
The Reader no longer insists that the file name or link name in GNU headers
@@ -587,10 +623,6 @@ When writing PAX- or GNU-format headers, the Writer now includes
the Header.AccessTime and Header.ChangeTime fields (if set).
When writing PAX-format headers, the times include sub-second precision.
-The Writer.Flush method,
-which has had no real effect since Go 1.1, is now marked deprecated.
-
FileHeader's new Modified field of type time.Time
obsoletes the ModifiedTime and ModifiedDate fields, which continue to hold the MS-DOS encoding.
The Reader and Writer now adopt the common
-convention that ZIP archive storing the Unix time encoding store the local time
-in the MS-DOS field, so that the time zone offset can be inferred.
+convention that a ZIP archive storing a time zone-independent Unix time
+also stores the local time in the MS-DOS field,
+so that the time zone offset can be inferred.
For compatibility, the ModTime and
SetModTime methods
behave the same as in earlier releases; new code should use Modified directly.
@@ -770,7 +803,7 @@ and
Go 1.10 adds support for reading relocations from Mach-O sections,
using the Section struct's new Relocs field
-and the newReloc,
+and the new Reloc,
RelocTypeARM,
RelocTypeARM64,
RelocTypeGeneric,
@@ -846,7 +879,7 @@ When the functions
and
DecodeString
encounter malformed input,
-they each now return the number of bytes already converted
+they now return the number of bytes already converted
along with the error.
Previously they always returned a count of 0 with any error.
The Decoder
adds a new method
-DisallowUnknownFields
+DisallowUnknownFields
that causes it to report inputs with unknown JSON fields as a decoding error.
(The default behavior has always been to discard unknown fields.)
+TODO: Reflect fallout. +
-The new function and corresponding
+The new Shuffle function and corresponding
Rand.Shuffle method
shuffle an input sequence.
Round
and
RoundToEven
-round their arguments to the nearest integer;
+round their arguments to the nearest floating-point integer;
Round rounds a half-integer to its larger integer neighbor (away from zero)
-while RoundToEven rounds a half-integer its even integer neighbor.
+while RoundToEven rounds a half-integer to its even integer neighbor.
@@ -1112,21 +1149,7 @@ if passed an invalid (non-3-digit) status code.
-The ReverseProxy now invokes
-the
-On the client side, an HTTP proxy (most commonly configured by
-ProxyFromEnvironment)
-can now be specified as an https:// URL,
-meaning that the client connects to the proxy over HTTPS before issuing a standard, proxied HTTP request.
-(Previously, HTTP proxy URLs were required to begin with http:// or socks5://.)
-
-On the server side, FileServer and its single-file equivalent ServeFile
-now apply If-Range checks to HEAD requests.
-FileServer also now reports directory read failures to the Server's ErrorLog.
-
-Redirect now sets the Content-Type header before writing its HTTP response.
+TODO: ReverseProxy and back end errors and ModifyResponse.
If-Range checks to HEAD requests.
ParseAddress and
-ParseAddressList and
+ParseAddressList
now support a variety of obsolete address formats.
Copy function now allows copyi
from a string into a byte array or byte slice, to match the
built-in copy function.
+
++TODO: New reflect CanSet change for pointers to unexported fields. +