Google's statically typed, compiled programming language, Go is similar to C, syntactically - but with memory safety, structural typing, garbage collection, and CSP-style concurrency.
Now, the next version of the language, Go 1.15 beta, offers smaller binary sizes via an enhanced compiler, and the runtime and linker have been improved with the forthcoming release. While the final release is due for August, with about five percent reduction in typical binary sizes in Go 1.15, compared to Go 1.14.
The reduction is as a result of elimination of more-aggressively unused type metadata and certain types of garbage collection metadata.
How Go 1.15 Achieved Compiler Improvements?.
The compiler improvements were achieved by the toolchain mitigation of Intel CPU erratum SKX102 on GOARCH=amd64 in aligning functions to 32-byte boundaries and padding the jump instructions.
While the compiler’s -json optimization logging now reports large copies qual to or as greater than 128 bytes, and provides explanations of escape analysis decisions. Albeit, the padding also increases binary sizes, which increase is more than compensated for by the binary size improvements. Go 1.15 brings a -spectre flag, though seldomly needed, to the compiler and assembler to enable Spectre CPU vulnerability mitigations.
And the Go 1.15 compiler rejects //go: compiler directives which have no meaning for the applied declarations, and reporting of a “misplaced compiler directive” error. These directives were previously broken, and were silently ignored by the compiler.
What are the Major Improvements in Go 1.15?
Besides the compiler improvements, the runtime allocation of small objects now performs better at high counts and has lower worst-case latency. Furthermore, the non-blocking receive on closed channels now perform as well as non-blocking receive on open channels.
Also, the Go linker has witnessed substantial reduction in linker resource usage; that for a set of large Go programs, linking is 20 percent faster and uses 30 percent less memory on average, and for ELF-based operating systems on AMD64 architectures, with more modest architecture/OS improvements.
The Key to the improved linker performance are the newly redesigned object file format and revamping of internal phases to boost concurrency.
If you wish to get started with Go 1.15 beta, it can be downloaded from the official website and you can refer to the release notes for further guidance.