GoogleのエンジニアChris Broadfoot氏によると、Go 1.7はコンパイル時間とランタイム性能を大きく改善している。また階層的テストとベンチマーク、Linux on IBM z Systems (s390x)上のLinuxの公式サポートも追加する。
InfoQがレポートしたように、Go 1.7におけるコンパイラの改善は、主にSSA(静的単一代入)形式に基づくamd64プラットフォーム向けのGoの新しいコンパイラバックエンドに関係している。新しいバックエンドは多数の先進的な最適化のおかげで、よりコンパクトで高速なコードを生成する。最適化には境界チェックの削除や共通式の削除が含まれる。Googleのベンチマークによると、ランタイムは5–35%高速になり、コンパイル時間とバイナリサイズは最大20–30%削減される。時としてベンチマークは大きく変わるかもしれないが、数名のHacker Newsユーザはビルド速度が2倍向上していると報告している。
前述の通り、新しいSSAバックエンドはamd64プラットフォームでしか使えない。だがGoogleのエンジニアBrad Fitzpatrick氏によると、サポートする全アーキテクチャへの移植はGo 1.8の主目標の一つだという。そして、古いバックエンドを削除することで、フロントエンドはさらにシンプルになるはずだという(現在は能力の低いバックエンドを使っていて、たくさんの仕事をしなくてはならない)。これはさらなるパフォーマンス改善をもたらすだろう。2017年2月にリリース予定のGo 1.8に関する詳細は、GoLang Devフォーラムで見つかるだろう。
その他Go 1.7にもたらされた注目すべき変更として、サブテストとサブベンチマークがある。これは階層的なテストやテーブルによるベンチマークの定義を可能にする。-run
および-bench
フラグの引数に、スラッシュ区切りの正規表現のリストを指定すればよい。
go test -run Foo # "Foo"にマッチするトップレベルのテストを実行
go test -run Foo/A= # "A="にマッチするFooのサブテストを実行
go test -run /A=1 # "A=1"にマッチするトップレベルテストの全サブテストを実行
最後に、Go 1.7は標準ライブラリの一部としてcontextパッケージを採用した。これはネットワーキング時のキャンセル、タイムアウト、リクエストのスコープに限定したデータの受け渡しを簡単にする。またvendorディレクトリの使用も標準になった。これにより、GOPATH
や標準ライブラリから自動的に引っ張ってくる代わりに、開発者は外部依存物のローカルコピーを使えるようになる。
Go 1.7における機能追加、改善、バグ修正の詳細については、リリースノートをチェックしよう。
Rate this Article
- Editor Review
- Chief Editor Action