Goブログ

Go 1.7リリース

クリス・ブロードフット
2016年8月15日

本日、Go 1.7のリリースを発表できることを嬉しく思います。ダウンロードページから入手できます。このリリースにはいくつかの重要な変更点があります。IBM z Systems上のLinux(s390x)への移植、コンパイラの改良、contextパッケージの追加、および階層型テストとベンチマークのサポートです。

静的単一代入形式(SSA)に基づく新しいコンパイラバックエンドが、過去1年間開発されてきました。プログラムをSSA形式で表現することで、コンパイラはより高度な最適化を容易に行うことができます。この新しいバックエンドは、境界チェックの削除共通部分式の削除などの最適化を含む、よりコンパクトで効率的なコードを生成します。ベンチマーク全体で5~35%の高速化を確認しました。現時点では、新しいバックエンドは64ビットx86プラットフォーム(「amd64」)でのみ利用可能ですが、将来のリリースではより多くのアーキテクチャバックエンドをSSAに変換する予定です。

コンパイラフロントエンドは、よりコンパクトな新しいエクスポートデータ形式を使用し、インポート宣言をより効率的に処理します。これらのコンパイラツールチェーン全体での変更はほとんど目に見えませんが、ユーザーはコンパイル時間の高速化とバイナリサイズの最大20~30%の削減を確認しています。

ガベージコレクタの高速化と標準ライブラリの最適化により、プログラムの実行速度が若干向上します。アイドル状態のゴルーチンが多いプログラムでは、Go 1.6と比べてガベージコレクションの停止時間が大幅に短縮されます。

過去数年で、golang.org/x/net/contextパッケージは多くのGoアプリケーションにとって不可欠なものとなっています。コンテキストは、ネットワーク、インフラストラクチャ、およびマイクロサービス(KubernetesDockerなど)関連のアプリケーションで非常に効果的に使用されています。これにより、キャンセル、タイムアウト、およびリクエストスコープデータの受け渡しを容易に行うことができます。標準ライブラリ内でコンテキストを使用し、より広範な使用を促進するために、このパッケージはx/netリポジトリから標準ライブラリにcontextパッケージとして移動されました。netnet/http、およびos/execパッケージにコンテキストのサポートが追加されました。コンテキストの詳細については、パッケージドキュメントと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コミュニティからのものです。これらの貢献は、コンパイラとリンカー、標準ライブラリ、ドキュメント、コードレビューへの変更など多岐にわたります。私たちは貢献を歓迎します。関与したい場合は、貢献ガイドラインを確認してください。

次の記事:より小さいGo 1.7バイナリ
前の記事:Go 1.6リリース
ブログインデックス