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