From: Filippo Valsorda
The latest Go release, version 1.12, arrives six months after Go 1.11.
- Most of its changes are in TODO.
+ Most of its changes are in the implementation of the toolchain, runtime, and libraries.
As always, the release maintains the Go 1 promise of compatibility.
We expect almost all Go programs to continue to compile and run as before.
+ There is a known issue in
+ the garbage collector that can cause rare crashes. It is being investigated.
+ Please report any issues you encounter.
+
@@ -39,30 +45,30 @@ Do not send CLs removing the interior tags from such phrases.
+ The race detector is now supported on
+
Go 1.12 is the last release that is supported on FreeBSD 10.x, which has
already reached end-of-life. Go 1.13 will require FreeBSD 11.2+ or FreeBSD
12.0+.
-Go 1.12 is the last release that will run on macOS 10.10 Yosemite.
-Go 1.13 will require macOS 10.11 El Capitan or later.
+
+ cgo is now supported on
-
+
- TODO: status of ARM32 port?
+ Go's new Changes to the language
Ports
-FreeBSD
+linux/arm64
.
+Darwin
-
-linux/ppc64
.
libSystem
is now used when making syscalls on Darwin, ensuring forward-compatibility
- with future versions of macOS.
+hurd
is now a recognized value for GOOS
, reserved
+ for the GNU/Hurd system for use with gccgo
.
Windows
windows/arm
port supports running Go on Windows 10
+ IoT Core on 32-bit ARM chips such as the Raspberry Pi 3.
AIX
@@ -71,11 +77,16 @@ Go 1.13 will require macOS 10.11 El Capitan or later.
Go now supports AIX 7.2 and later on POWER8 architectures (aix/ppc64
). External linking, cgo, pprof and the race detector aren't yet supported.
- hurd
is now a recognized value for GOOS
, reserved
- for the GNU/Hurd system for use with gccgo
.
+
+ Go 1.12 is the last release that will run on macOS 10.10 Yosemite. + Go 1.13 will require macOS 10.11 El Capitan or later. +
+ +
+ libSystem
is now used when making syscalls on Darwin,
+ ensuring forward-compatibility with future versions of macOS and iOS.
@@ -230,6 +241,18 @@ for { printing and variable location information.
+
+ Go programs now also maintain stack frame pointers on linux/arm64
+ for the benefit of profiling tools like perf
. The frame pointer
+ maintenance has a small run-time overhead that varies but averages around 3%.
+ To build a toolchain that does not use frame pointers, set
+ GOEXPERIMENT=noframepointer
when running make.bash
.
+
+ The obsolete "safe" compiler mode (enabled by the -u
gcflag) has been removed.
+
godoc
and go
doc
@@ -253,6 +276,14 @@ for { latency and throughput.
+
+ On arm64
, the platform register was renamed from
+ R18
to R18_PLATFORM
to prevent accidental
+ use, as the OS could choose to reserve this register.
+
@@ -336,12 +367,8 @@ for { in mind.
- - - - - - + +@@ -352,14 +379,6 @@ for {
- TODO: https://golang.org/cl/61511: support frame-pointer for arm64 -
- -@@ -375,14 +394,6 @@ for {
- TODO: https://golang.org/cl/138675: enable race detector on arm64 -
- -@@ -501,14 +512,6 @@ for {
- TODO: https://golang.org/cl/130676: use F_FULLFSYNC fcntl for FD.Fsync on OS X -
- -@@ -620,6 +623,11 @@ for { on most Unix systems.
+
+ File.Sync
now uses F_FULLFSYNC
on macOS
+ to properly flush content to permanent storage. Note that this might have a negative performance impact.
+
+ It is invalid to convert a nil unsafe.Pointer
to uintptr
and back with arithmetic.
+ (This was already invalid, but will now cause the compiler to misbehave.)
+