Go 1.7に向けた開発サイクルの次のマイルストーンが近づく中、GoのコミッターであるDave Cheney氏が、リリースに向けたツールチェーンの改善に関するチームの取り組みについて報告した。
現在の開発ステージを考えると、Go 1.7は少なくともGoの過去最高のリリースになるだろう、Cheney氏は語る。ツールチェーンの改善は、次の2つの領域に注力して行われている。
- コンパイル時間とリンク時間
- コード生成
コンパイル時間に関して、CからGoへのポート以来、Goコンパイラはパフォーマンス低下にさいなまれてきた。この問題については様々な議論があるが、Go 1.7に向けた最近の作業は、コンパイラが使うメモリ量の削減とリンク時間の改善が狙いだった。図にあるように、おかげで全体のコンパイル時間は、Go 1.5.3に対しておよそ20–30%削減されている。
見てわかるように、依然として、Go 1.4.3のコンパイラの方が現在の1.7よりも、大幅に優れている。しかし、新しいGoコンパイラには、全く新しいコード生成バックエンドが含まれており、パフォーマンスに関してまだ十分成熟していないことを考えると、現在の改善の重要性をその通りに理解すべきではない。
また、Goのブートストラップ化の判断は、パフォーマンスとは無関係であったことにも注意すべきだ。CではなくGoを使うことの利点は、開発にもたらされるものにあった。正しいコードの書きやすさ、デバッグのしやすさ、優れたツール、並列処理のサポートなどだ。実のところ、Goコンパイラのコードはスクラッチから書かれたものではなく、Cのコードから自動的に変換されたものだ。
先に述べたように、Go 1.7のもう一つの注力領域はコード生成だ。新しいバックエンドはSSA形式(静的単一代入形式)を使うよう移行した。これはLLVMなどのコンパイラがやっているのと同じで、生成されたコードに様々な最適化が可能になる。それにはデッドコード削除、レジスタアロケーション、スタックフレームアロケーションなどの改善が含まれる。Cheney氏が書いているように、Go 1.7の新しいSSAバックエンドは、この開発の初期段階において、最大20%高速なコードを生成している。さらに、Go 1.6と比べて小さなバイナリを生成し、多くの場合、Go 1.4と肩を並べている。
Rate this Article
- Editor Review
- Chief Editor Action