Go 1.7 is here
Go 1.7 has been released! The most significant changes are a port for Linux on IBM z Systems (s390x), compiler improvements, the addition of the context package, as well as support for hierarchical tests and benchmarks. This release maintains the Go 1 promise of compatibility.
Chris Broadfoot, Senior Developer Programs Engineer at Google gave a shout-out to the 170 people who contributed to the Go 1.7 release, including 140 from the Go community; their contributions ranged from the compiler and linked, to documentation, standard library and code reviews. The biggest changes in the seventh major stable release of Go are a port for Linux on IBM z Systems (s390x), compiler improvements, the addition of the context package, and support for hierarchical tests and benchmarks.
What’s new in Go 1.7?
For the past year, the team has been developing a new compiler back end, based on static single-assignment form (SSA). By representing a program in SSA form, a compiler may perform advanced optimizations more easily. According to the announcement, one of the perks of the new back end is that it generates more compact, efficient code which includes optimizations such as common subexpression elimination and bounds check elimination. At the moment, the new backend is only available for the 64-bit x86 platform (“amd64”). However, Broadfoot revealed that converting more architecture backends to SSA is something that may be included in future releases.
The compiler front end now uses a more compact export data format and processes import declarations more efficiently. Despite the fact that these changes across the compiler toolchain are “mostly invisible,” there has been a notable speedup in compile time, users have noticed. Plus, there has been a reduction in in binary size by 20–30 percent.
SEE ALSO: Go 1.6 is now available
Speedups in the garbage collector, paired with optimizations in the standard library have helped programs run a bit faster. Another thing that Go 1.7 offers (and Go 1.6 didn’t) is the following: programs with many idle goroutines will experience much shorter garbage collection pauses.
Change to the language specification
As the section on terminating statements explains, to determine whether a statement list ends in a terminating statement, the “final non-empty statement” is considered the end, matching the existing behavior of the gc and gccgo compiler toolchains. What differentiates Go 1.7 from previous releases is the fact that the
go/types package has been updated to match the gc and gccgo compiler toolchains; in previous releases, the definition simply referred to the “final statement,” which meant that the effect of trailing empty statements was at the least unclear.
To read the entire list of fixes, improvements and additions, check out the Go 1.7 release notes.
SEE ALSO: Can Go dictate trends in 2016?
“Go gives you less on purpose”
Last month we talked to Matt Aimonetti, the co-founder and CTO of Splice, about the complexity of Go, its community and the need for more documentation, posts and books for new programmers. Matt revealed that when he founded his startup, he knew that he needed a solid code foundation. One of his first thoughts was to use either Clojure, Scala or Go, but the first two were not so appealing because he couldn’t architect his code in a way that allowed him to re-read/trace his code later on and Scala had three major downsides: lack of clear style guidance, slow compilation and the fact that growing a team around such a flexible language seemed challenging.
Go was much simpler to wrap your mind around, the compilation was really fast, deployment was straightforward, it was tested on very large teams and the community was very supportive (as well as well-organized and full of very experienced/smart people). I decided to take a bet on Go since it seemed like the best option at the time. I am very glad I did.
Read the full interview here.