BT

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
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。