Google Go 1.6 is now available in its first release candidate. This version of the language focuses on improving the toolchain, bolstering internal features like garbage collection, adding new ports to different architectures, and buffing the core library.
One element that hasn't changed at all, though, is the language itself. That's a reflection of Google's ongoing commitment to make Go deliver much with little.
Most prior changes to Go were about handling corner cases or clarifying the use of a specific feature, not grafting in additional functionality. Not so this time around: "There are no language changes in this release," states the Go 1.6 release document.
This isn't so much an aberration or omission as it is Go living up to one of its goals. With all 1.x editions, Go's maintainers have promised strong forward compatibility, meaning that software written in earlier versions of 1.x will compile and run in later versions of 1.x. The general structure of the language -- including items that have sparked some controversy, such as the workings for error and exception handling -- is here to stay, at least until a Go 2.x spec appears.
One big change in version 1.6 is a new garbage collection system that should give users better performance. For some time, Go's "stop the world" garbage collector meant applications ran with noticeable pauses whenever garbage collection kicked in. Go 1.5 swapped in an all-new garbage collector that used far smaller time slices, didn't require manual tuning on multicore systems, and benefited from being written in Go itself.
"The garbage collector's pauses [for 1.6] are even lower than in Go 1.5," states the release document, "although the effect is likely only noticeable for programs using a large amount of memory [such as gigabytes]." Likewise, existing Go applications are likely to enjoy a few percent improvement in speed overall by doing nothing more than being recompiled using the 1.6 toolchain.
Another ongoing improvement has been porting the Go toolchain to multiple architectures. Go 1.6 adds a 64-bit MIPS port for Linux and an experimental 32-bit x86 Android port. In time, Go could be used to write components of Android applications, in much the same way C++ today does, although a Java wrapper would still be required.