「Go 1.6」リリース、細かな性能改善などがメインのリリースに
Googleが開発するプログラミング言語「Go」の開発チームは2月17日、最新版となる「Go 1.6」を公開した。HTTP/2のサポートなどが加わっている。
Go 1.6は2012年3月に1.0が公開されて以来、7回目のメジャー安定版リリース。Go 1.5は2015年8月に公開されており、6か月ぶりのリリースとなる。
1.5と比較すると目に見える大きな変更点は少なく、言語やランタイム、ライブラリ実装の変更が主になるという。言語仕様に変更はなく、本リリースでの大きな変更点としては64ビットMIPS上で動作するLinux版および32ビットx86上で動作するAndroid版ポートが追加された点やC言語とのポインタ共有ルールの強化、HTTP/2サポート、テンプレート再利用メカニズムなどが挙げられている。
HTTP/2サポートはnet/httpパッケージに追加されたもの。HTTP/2はGoogleのWeb高速化技術SPDYを土台とした新しい仕様だが、すでに主要なWebブラウザベンダーと多くのWebサイトがサポートしている。Go 1.6では、サーバーとクライアントの両方でデフォルトでHTTP/2のサポートが有効になった。
テンプレートパッケージを改良し、クリーンなテンプレート出力を目的に、スペースのトリミングをサポートした。また、ほかのテンプレート上にテンプレートを構築するのに利用できるblockアクションも導入した。
バージョン1.5で実験的にサポートされていた「vendor」ディレクトリがデフォルトで有効となった。「vendor」と名付けられたディレクトリを含むソースツリー内にあるモジュール等がデフォルトで有効になるため、このディレクトリを利用しているユーザーは内容を確認して必要に応じて変更を行う必要がある。
ランタイムも強化され、マップの並行処理の誤用を検出する機能が加わった。goroutineがあるマップに書き出している際に、ほかのgoroutineがそのマップを並行して読み書きすることを防ぐことを目的としたもの。このほかにも細かな強化が加わっている。
性能については1.5と同じとしている。ガベージコレクションの停止頻度はバージョン1.5より少なくなっているが、その差異は大容量のメモリを利用するプログラムで感じられる程度としている。ただ、sort.Sortメソッドなど一部の機能はアルゴリズム改善により約10%高速になったという。
また、C言語ライブラリ呼び出しのcgoで、GoとC間のポインターの共有についてのルールが変更となった。コンパイラ、リンカー、goコマンドで新たに-msanフラグを導入した。-raceに類似したもので、linux/amd64のみで利用でき、Clang MemorySanitizeとの相互運用が可能になるという。