Go 1.8のリリース

Go 1.8 is released by Chris Broadfoot

本日、Goチームは Go 1.8 のリリースを発表できることを嬉しく思います。ダウンロードページ から入手できます。 標準ライブラリ全体にわたって、大幅なパフォーマンスの改善と変更が加えられています。

Go 1.7 で導入された64ビットx86向けのコンパイラバックエンドが、 今回のリリースからすべてのアーキテクチャで使われるようになり、それらのアーキテクチャでは大幅な パフォーマンスの改善が見込めます。 たとえば、私たちのベンチマークプログラムに必要なCPU時間は、32ビットARMシステムでは20〜30%削減されました。 64ビットx86システムについても、今回のリリースではいくらか控えめながらパフォーマンスの改善があります。 コンパイラとリンカも高速化されました。 コンパイル時間はGo 1.7と比べて約15%改善されるはずです。 この領域についてはまだやるべきことが残っており、今後のリリースではさらなるコンパイル速度の向上が期待できます。

ガベージコレクションの停止時間は大幅に短縮され、 通常は100マイクロ秒未満、しばしば10マイクロ秒程度にまで抑えられるはずです。

HTTPサーバーはHTTP/2 Pushのサポートを追加しました。 これにより、サーバーはクライアントへのレスポンスを先回りして送信できるようになります。 これはラウンドトリップをなくすことでネットワークレイテンシを最小化するのに役立ちます。 またHTTPサーバーはグレースフルシャットダウンのサポートも追加しました。 これにより、サーバーは処理中のすべてのリクエストの処理を終えてからシャットダウンすることで、 ダウンタイムを最小限に抑えられるようになります。

(Go 1.7で標準ライブラリに追加された)コンテキストは、 キャンセルとタイムアウトの仕組みを提供します。 Go 1.8では、標準ライブラリのより多くの部分でコンテキストのサポートが追加されdatabase/sqlnet パッケージ、 そして net/http パッケージの Server.Shutdown が含まれます。

sort パッケージに新しく追加された Slice 関数によって、 スライスのソートがずっと簡単になりました。たとえば、構造体のスライスを Name フィールドでソートするには 次のように書けます。

sort.Slice(s, func(i, j int) bool { return s[i].Name < s[j].Name })

Go 1.8にはこの他にも多くの追加、改善、修正が含まれています。 変更点の全容や、ここまでに挙げた改善点についての詳しい情報は、 Go 1.8 リリースノート を参照してください。

リリースを祝して、世界中のGoユーザーグループが今週リリースパーティーを 開催しています。リリースパーティーはGoコミュニティの伝統になりつつあるので、 もし今回参加しそびれても、1.9が近づいてきたときにはぜひ注目してみてください。

今回のリリースに力を貸してくれた200名を超えるコントリビューターに感謝します。

By Chris Broadfoot