BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Go 1.9、型エイリアスを導入、ランタイムとツールを改善

Go 1.9、型エイリアスを導入、ランタイムとツールを改善

ブックマーク

原文(投稿日:2017/08/28)へのリンク

最近リリースされた Go 1.9の最大の変更は、型エイリアス宣言を使った段階的なコード改修のサポート改善だ。Go 1.9では、ガベージコレクタとコンパイラも改善されている。

GoogleエンジニアのRuss Cox氏の説明によると、段階的なコード改修は、コードのリファクタリングに有用なアプローチで、大きなコードベースでは非常に有益だ。簡単に言うと、段階的なコード改修は、全ての変更をアトミックに(1つのコミットで)行うのではなく、一連のステップ(コミット)によって大きなリファクタリングを実行することを目指している。通常、アトミックなリファクタリングの方が、概念レベルではシンプルだが、大きなコードベースでは本当に巨大なコミットになる恐れがある。これはレビューやマージを困難にする。段階的なコード改修では、コードを3ステップでリファクタリングする。まず、古いAPIと共存できる新しいAPIを導入する。そのため、古いAPIを使っているところを一度に全部変更する必要はない。次に、古いAPIを使っているところを新しいAPIにコンバートする。最後に、古いAPIを削除する。

段階的なコード改修を可能にするには、定数、関数、変数、型に別名を付けられる必要がある。Goは次のような宣言で型エイリアスを定義できるようになる。

type OldAPI = NewPackage.API

これを使うと、OldAPIへの全ての参照を、リファクタリングした型を使うように変えることができる。段階的なコード改修に関する様々な議論について、Russ Cox氏の解説は必見だ。

GoogleエンジニアのFrancesc Campoy氏の説明によると、Go 1.9におけるエンジニアリング取り組みのほとんどは、ランタイム、コードライブラリ、ツールの改善に関連しているという。最も重要な変更は以下の通り。

  • 多数のライブラリ関数がコンカレントGCをトリガーするおかげで、Goガベージコレクタのパフォーマンスが改善された。これはプログラム全体ではなく呼び出し元のgoroutineだけをブロックする。加えて、大きなオブジェクトのヒープ割り当てが大幅に改善された。

  • Go 1.9コンパイラでは、同一パッケージに属する関数を並列にコンパイルできるようになった。別のパッケージの並列コンパイルはこれまでのコンパイラですでに可能だった。

  • コアライブラリフロントでは、モノトニック時刻(monotonic time)のトラッキングにより、timeパッケージを安全に利用できるようになる。これにより、ウォールクロック(wall clock)が調整された場合でも、Time値との比較が容易になる。加えて、syncパッケージに属する新しいMap型は、一定時間で読み出し、格納、削除できるスレッドセーフで並行アクセス可能なマップを提供する。

Go 1.9に導入された全ての変更について学ぶためには、公式のリリースノートを読むようにしよう。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT