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. +