golang1.5について

go/doc/go1.5.htmlとThe State of Goの内容をベースにgo1.5の変更点をまとめた。 調査が足らない項目(Execution Tracing)は後日調査しよう。

大きな変更点

  • No more C
  • 並列実行GC
  • GOMAXPROCSのデフォルト値変更
  • internal packagesサポート
  • "vendoring" external dependenciesサポート(experimental)
  • fine-grained tracing of program execution
  • go doc command-line use

言語仕様変更

Map literalsで要素の型記述が不要になった(型推論)。

変更前

m := map[Point]string{
    Point{29.935523, 52.891566}:   "Persepolis",
    Point{-25.352594, 131.034361}: "Uluru",
    Point{37.422455, -122.084306}: "Googleplex",
}

変更後

m := map[Point]string{
    {29.935523, 52.891566}:   "Persepolis",
    {-25.352594, 131.034361}: "Uluru",
    {37.422455, -122.084306}: "Googleplex",
}

No more C

コンパイラと実行環境は、GoとアセンブラのみでCソースは含まれていない。唯一のCコードはテストとcgo関連のみ。

同一言語でコンパイラを実装することを「ブートストラップ」というがGoがCを捨てたのは違う理由らしい。

  • GoはCより正しく書くのが簡単
  • GoはCよりデバッグが簡単(デバッガがなくても)
  • Goはあなたが知る必要のある唯一の言語
  • GoはCよりモジュール化、ツール、テスト、プロパイリングが良い環境
  • GoはCより並列実行のCPUコストが低い
Go 1.5のブートストラップ化を目指すGoogle
ブートストラップとは,“コンパイルの対象とするプログラミング言語そのものでコンパイラ(またはアセンブラ)を開発するプロセス”のことだ。一般的にブートストラップには,次のようなメリットがあると言われている。
  • ブートストラップを行う言語のテストのため。
  • より高度な抽象性を備えた,通常は高レベルな言語でコンパイラを記述することができる。
  • 言語自体の改良結果を参照することで,コンパイラがそれらの恩恵を受けることが可能になる。

関連情報

並列実行GC

ゴール

  • 10秒以下のレイテンシ
  • Goアプリを少なくても40〜50msec実行

処理速度性能

  • メモリ使用量・CPU時間を増やしてGCによるポーズ時間を短くする。
  • 並列処理向上(GOMAXPROCS=CPUコア数)

ことによって、Go 1.5は1.4に比べて向上した。

関連資料

GOMAXPROCSのデフォルト値変更

1からコア数に変更になった。

internal packageサポート

パッケージimportの規約。パッケージのパスにinternalが付いている場合、internalの親パス以外のからはアクセス出来ない。

/a/b/c/internal/d/e/fというパッケージのコードは、ルートディレクトリ(/a/b/c)でしかimportできない。/a/b/gのコードからはimportできない。

原文

For example:
  • Code in /a/b/c/internal/d/e/f can be imported only by code in the directory tree rooted at /a/b/c. It cannot be imported by code in /a/b/g.
  • $GOROOT/src/pkg/internal/xxx can be imported only by other code in the standard library ($GOROOT/src/).
  • $GOROOT/src/pkg/net/http/internal can be imported only by the standard net/http and net/http/* packages.
  • $GOPATH/src/mypkg/internal/foo can be imported only by code in $GOPATH/src/mypkg.

関連資料

Vendoring external package()experimental

importするコード(ライブラリ)が依存するパッケージの取り込み方。ライブラリのVersioningと同じくある程度以上の製品を開発する場合に問題になる。

関連資料

Execution Tracing

新しい実行トレーサは実行時データを収集し、ダイアグラムを作成することができる。フロントエンドは、Android/Chrome trace-viewer。

関連資料

Analysis and Refactoring Tools

リファクタリングツールは便利そう。

解析ツール

  • oracle: a tool for answering questions about Go source code (w/ plugins for Sublime Text and Emacs).
  • callgraph: display the call graph of a Go program.
  • godoc -analysis=pointer: see pointer analysis details in godoc.

リファクタリングツール

  • eg: a template-based refactoring tool
  • gorename: type-safe renaming of identifiers in Go source code.

shared library

ビルドモードに、c-sharedとc-archiveが追加された。

go1.5のshared library機能を使ってみた - unokun’s blog参照。