Go 1.7 リリース
Go 1.7 is released by Chris Broadfoot
本日、Go 1.7のリリースを発表できることを嬉しく思います。 ダウンロードページから入手できます。 今回のリリースにはいくつか重要な変更が含まれています。IBM System z上のLinux(s390x)向けの移植、コンパイラの改善、 contextパッケージの追加、そして階層化されたテストとベンチマークのサポートです。
過去1年間、静的単一代入(SSA)形式に基づく新しいコンパイラバックエンドの開発が進められてきました。 プログラムをSSA形式で表現することで、コンパイラはより高度な最適化を簡単に行えるようになります。 この新しいバックエンドは、境界チェックの除去や 共通部分式の除去といった最適化を含む、より小さくより効率的なコードを生成します。 私たちのベンチマークでは全体で5〜35%の速度向上が見られました。 現時点では、この新しいバックエンドは64ビットのx86プラットフォーム(「amd64」)でのみ利用可能ですが、 今後のリリースではさらに多くのアーキテクチャ向けバックエンドをSSAに変換していく予定です。
コンパイラのフロントエンドは新しく、より小さなエクスポートデータ形式を使うようになり、import 宣言をより効率的に処理するようになりました。
ツールチェイン全体にわたるこれらの変更のほとんどは目に見えるものではありませんが、
ユーザーからは、コンパイル時間の大幅な高速化と、最大20〜30%にも及ぶバイナリサイズの削減が報告されています。
ガベージコレクタの高速化と標準ライブラリでの最適化により、プログラムは多少速く動作するようになるはずです。 アイドル状態のゴルーチンを多数抱えるプログラムでは、Go 1.6と比べてガベージコレクションの一時停止時間が大幅に短くなります。
ここ数年、golang.org/x/net/contextパッケージは多くのGoアプリケーションにとって欠かせないものであることが証明されてきました。 コンテキストは、ネットワーキング、インフラストラクチャ、マイクロサービスに関連するアプリケーション (KubernetesやDockerなど)で大いに役立っています。 キャンセルやタイムアウトの実現、リクエストスコープのデータの受け渡しが簡単になります。 標準ライブラリの中でコンテキストを利用できるようにし、その利用をより広く促進するため、 このパッケージはx/netリポジトリから標準ライブラリへ移動し、 contextパッケージとなりました。 net、net/http、os/execの各パッケージにコンテキストのサポートが追加されています。 コンテキストについての詳細は、パッケージドキュメントおよびGoのブログ記事 「Goの並行パターン:コンテキスト」(原題:Go Concurrency Patterns: Context)を参照してください。
Go 1.5では、環境変数GO15VENDOREXPERIMENTによって有効化される「vendor」ディレクトリの実験的サポートが導入されました。
Go 1.6ではこの挙動がデフォルトで有効化されました。
Go 1.7ではこのスイッチが削除され、「vendor」の挙動は常に有効になっています。
Go 1.7にはこの他にも数多くの追加、改善、修正が含まれています。 変更点の全容や、ここまでで触れたポイントの詳細については、Go 1.7のリリースノートを確認してください。
最後に、Goチームはこのリリースに貢献してくれたすべての人々に感謝したいと思います。 今回のリリースには170人が貢献し、そのうち140人はGoコミュニティからの貢献者です。 これらの貢献は、コンパイラやリンカへの変更から、標準ライブラリ、ドキュメント、コードレビューにまで及んでいます。 私たちは貢献を歓迎します。参加したい方はコントリビューションガイドラインを確認してください。
By Chris Broadfoot