先取り Go 1.5
PFIセミナー
柏原秀蔵
Preferred  Networks,  Inc.
2015/07/09
⾃自⼰己紹介
l  柏原秀蔵 (@suma90h) (Preferred Networks)
l  最近:Go⾔言語を書いてます
l  最近の活動
–  システム系論論⽂文輪輪読会(論論⽂文読み会)  主催
–  お菓⼦子作り(写真は古いですが、なんとか継続してます)
3
概要
l  発表概要
l  Go 1.5の開発ステータス
l  Go 1.5の新機能、変更更点
l  未リリースのリリースノートの先取り
–  Shared Library
–  Execution Tracing
–  Concurrent GC
–  Vendoring
l  Go 1.5を使ってみる
l  Goの開発を追うには
l  まとめ
4	
https://github.com/golang-samples/gopher-vector
より Creative Commons 3.0
発表概要
l  発表の主な対象者
–  Go⾔言語ユーザ(開発者)
–  Go製ツールのユーザも(好)影響ありそう
l  ※注意点:このスライド作成時点では、Go  1.5は未リリースでもあるのと、
私の調査不不⾜足が原因で記述が不不正確である可能性があります
l  Go  1.5について個⼈人的に気になる新機能/Release  notesをピックアップした
l  この資料料は「The  State  of  Go  (May)」とGolang  githubらを辿った要旨・各
種資料料へのポインタだと思って使っていただければ
–  https://talks.golang.org/2015/state-‐‑‒of-‐‑‒go-‐‑‒may.slide#1
–  https://github.com/golang/go/blob/master/doc/go1.5.html
5
Go  1.5の開発ステータス
l  Go  1.5リリースは2015年年8⽉月1⽇日予定  現在(7⽉月)からあと約1ヶ⽉月先!  
–  5⽉月時点で⼤大幅な作業は終わっていて、feature  freezeに⼊入っているらしい  
–  ここまで、The  State  of  Go  からの情報
–  締め切切りが正確なら、近⽇日Release  Candidateが出るかもしれないと想像
l  Goは1.5から年年2回リリースのリリース計画となった
–  2⽉月1⽇日、8⽉月1⽇日の半年年ごとのメジャー(1.x)  リリース
–  3ヶ⽉月は開発、3ヶ⽉月はtesting(feature  freeze)の期間を取る
–  http://golang.org/s/releasesched
6
Go  1.5で注⽬目したい新機能・⼤大きな差分
l  未リリースであるが、リポジトリ中のリリースノートから抜粋
l  期待の新機能
–  Shared  Library
–  Execution  Tracing  (go  trace  コマンド)
–  Concurrent  Garbage  Collection
–  “vendoring”  external  package
l  気になる差分
–  ツールチェーンからC⾔言語を排除(Go  1.5のビルドにGo  1.4以降降が必要)
u  https://talks.golang.org/2015/gogo.slide#1
u  https://golang.org/s/go13compiler
u  Go  1.5のブートストラップ化を⽬目指すGoogle
‒  http://www.infoq.com/jp/news/2015/02/golang-‐‑‒15-‐‑‒bootstrapped
7
Go  1.5の差分
l  GOMAXPROCS環境変数がデフォルトでCPUコア数になった
l  internal  packageの⾔言語ユーザへの導⼊入
–  http://qiita.com/taka011239@github/items/5735a1ec78bad06f5485
–  http://golang.org/s/go14internal
l  前述の通りリリース計画が変更更で、半年年ごとの年年2回リリースになった
l  ⾔言語の⼩小さな変更更点
l  などなど
8
Shared  Library
l  buildmodeというコマンドラインオプションが新たに追加され、shared  objec
tの⽣生成が可能になった
–  $  go  build  –buildmode=shared  〜~略略〜~
l  buildmode  (go  help  buildmodeの⼀一部をざっくり説明)
–  archive:  mainパッケージ以外を.aファイルにビルドする
–  c-‐‑‒archive: mainと必要なパッケージをC⽤用のアーカイブにビルドする。Goソース中
で“//export  funcname”  マークが必要
–  c-‐‑‒shared: c-‐‑‒archiveのshared  library作成版
–  shared: mainパッケージ以外をshared  library化して、-‐‑‒linksharedオプション
でリンクできるようにする
l  Golang  で  Shared  Library  を出⼒力力する。  -‐‑‒  Qiita
l  Go  Execution  Modes
l  Thanks  pepshiso!
9
Execution  Tracing
l  fine-‐‑‒grained  (細かい粒粒度度)でのパフォーマンスモニタリングができるように
なったらしい
l  監視できるstats:それぞれの開始時間と、要した時間
–  Heap(GC)
–  Goroutine
–  スレッド
–  GoのProcessorごとでのプロファイル
u  システムコールの呼び出し・スタックトレース
l  提案ドキュメントではnetwork  IOも対象だったが、パッチを⾒見見るとIO監視は
確認できなかった
l  Go  Execution  Tracer:  http://golang.org/s/go15trace
l  Groupsのスレッドでは、AMD  Code  AnalystやIntel  VTuneを意識識している発⾔言
も
10
“vendoring”  external  package
l  Go⾔言語における  import  (go  get)のバージョン問題に対する実験的取り組み
l  Goユーザの⼈人はご存じの通り、Goは依存する外部ライブラリのバージョン指
定する機能を提供してない
–  これを解決するためにGodepコマンドのようなhackがある
–  Go公式でvendoring(依存リポジトリを⾃自分のリポジトリに含める)⽅方法が実験的
にサポートされるようになる
l  vendoringの詳細は次のNakashimaさんのエントリがかなり詳しい
l  Go⾔言語のDependency/Vendoringの問題と今後.gbあるいはGo1.5  |  SOTA
–  http://deeeet.com/writing/2015/06/26/golang-‐‑‒dependency-‐‑‒vendoring/
l  https://golang.org/s/go15vendor
11
Concurrent  GC
l  GCはStop  the  worldとConcurrent  GCのハイブリッドを前から採⽤用していた。
1.5ではstop  the  worldからconcurrent  collectorになってGCによる停⽌止期間
を改善した様⼦子
–  GCのレイテンシを10ms以下を⽬目標としている
l  GCによる停⽌止期間を短く、その代わりCPUとメモリ消費が少し増加
l  ほとんどのケースでgoroutineの並列列時のCPU使⽤用効率率率が上がるらしい
l  デザインドキュメントあります(あまり読んでません)
–  https://golang.org/s/go14gc
–  https://golang.org/s/go15gcpacing
l  Go  1.5以降降のガベージコレクタについてのプラン  –  Qiita
–  http://qiita.com/ruiu/items/40a1d362417808c690a8
12
Go  1.5を使ってみる
l  ビルドは簡単
–  Go  1.5  以降降のビルド⼿手順  –  Qiita
–  http://qiita.com/orociic/items/b285cf205f75b7291a9d
l  trace  コマンドを紹介(Execution  Tracing)
–  $  go  test  -‐‑‒trace=/tmp/trace  -‐‑‒run=BenchName-‐‑‒bench=BenchName  –cpu=4
–  $  PATH=trace-‐‑‒viewer/tracing:$PATH  trace  -‐‑‒http=localhost:9876  path/to/
testbinary.test  /tmp/trace
–  解説:  http://golang.org/s/go15trace
13
traceの例例
14
Goの開発を追うには
l  開発者による発表資料料が公開されているので読む(リンクも辿る)
–  https://talks.golang.org
l  Design  Documentが公開されているので読む
l  Google  Groupsのgolang-‐‑‒devを⾒見見る
–  https://groups.google.com/forum/#!forum/golang-‐‑‒dev
l  githubのリポジトリ、issueを⾒見見る
–  今回は幸いにもリリース間近だったため、作成途中のリリースノートを参照できた
–  https://github.com/golang/go
15
まとめと感想
l  Go  1.5の新機能/変更更点を8⽉月予定のリリースに先⾏行行して紹介した
l  情報を調べるにあたって既存スライド、リポジトリ、Design  Documentなど
開発のコア・近しい情報源をあたった
–  1.5リリース後になれば、⽇日本語での資料料やまとめも増えてくると考えられる
l  Go⾔言語ランタイム/コンパイラの開発スタイルは今回の調査で把握した
–  Design  Documentを書いてGoogle  Groupsでコメントを募る形で議論論が進む
–  (よく読んでないが)「Contribution  Guidelines」もある
u  https://golang.org/doc/contribute.html
16

先取り Go1.5

  • 1.
  • 3.
    ⾃自⼰己紹介 l  柏原秀蔵 (@suma90h)(Preferred Networks) l  最近:Go⾔言語を書いてます l  最近の活動 –  システム系論論⽂文輪輪読会(論論⽂文読み会)  主催 –  お菓⼦子作り(写真は古いですが、なんとか継続してます) 3
  • 4.
    概要 l  発表概要 l  Go1.5の開発ステータス l  Go 1.5の新機能、変更更点 l  未リリースのリリースノートの先取り –  Shared Library –  Execution Tracing –  Concurrent GC –  Vendoring l  Go 1.5を使ってみる l  Goの開発を追うには l  まとめ 4 https://github.com/golang-samples/gopher-vector より Creative Commons 3.0
  • 5.
    発表概要 l  発表の主な対象者 –  Go⾔言語ユーザ(開発者) – Go製ツールのユーザも(好)影響ありそう l  ※注意点:このスライド作成時点では、Go  1.5は未リリースでもあるのと、 私の調査不不⾜足が原因で記述が不不正確である可能性があります l  Go  1.5について個⼈人的に気になる新機能/Release  notesをピックアップした l  この資料料は「The  State  of  Go  (May)」とGolang  githubらを辿った要旨・各 種資料料へのポインタだと思って使っていただければ –  https://talks.golang.org/2015/state-‐‑‒of-‐‑‒go-‐‑‒may.slide#1 –  https://github.com/golang/go/blob/master/doc/go1.5.html 5
  • 6.
    Go  1.5の開発ステータス l  Go 1.5リリースは2015年年8⽉月1⽇日予定  現在(7⽉月)からあと約1ヶ⽉月先!   –  5⽉月時点で⼤大幅な作業は終わっていて、feature  freezeに⼊入っているらしい   –  ここまで、The  State  of  Go  からの情報 –  締め切切りが正確なら、近⽇日Release  Candidateが出るかもしれないと想像 l  Goは1.5から年年2回リリースのリリース計画となった –  2⽉月1⽇日、8⽉月1⽇日の半年年ごとのメジャー(1.x)  リリース –  3ヶ⽉月は開発、3ヶ⽉月はtesting(feature  freeze)の期間を取る –  http://golang.org/s/releasesched 6
  • 7.
    Go  1.5で注⽬目したい新機能・⼤大きな差分 l  未リリースであるが、リポジトリ中のリリースノートから抜粋 l 期待の新機能 –  Shared  Library –  Execution  Tracing  (go  trace  コマンド) –  Concurrent  Garbage  Collection –  “vendoring”  external  package l  気になる差分 –  ツールチェーンからC⾔言語を排除(Go  1.5のビルドにGo  1.4以降降が必要) u  https://talks.golang.org/2015/gogo.slide#1 u  https://golang.org/s/go13compiler u  Go  1.5のブートストラップ化を⽬目指すGoogle ‒  http://www.infoq.com/jp/news/2015/02/golang-‐‑‒15-‐‑‒bootstrapped 7
  • 8.
    Go  1.5の差分 l  GOMAXPROCS環境変数がデフォルトでCPUコア数になった l internal  packageの⾔言語ユーザへの導⼊入 –  http://qiita.com/taka011239@github/items/5735a1ec78bad06f5485 –  http://golang.org/s/go14internal l  前述の通りリリース計画が変更更で、半年年ごとの年年2回リリースになった l  ⾔言語の⼩小さな変更更点 l  などなど 8
  • 9.
    Shared  Library l  buildmodeというコマンドラインオプションが新たに追加され、shared objec tの⽣生成が可能になった –  $  go  build  –buildmode=shared  〜~略略〜~ l  buildmode  (go  help  buildmodeの⼀一部をざっくり説明) –  archive:  mainパッケージ以外を.aファイルにビルドする –  c-‐‑‒archive: mainと必要なパッケージをC⽤用のアーカイブにビルドする。Goソース中 で“//export  funcname”  マークが必要 –  c-‐‑‒shared: c-‐‑‒archiveのshared  library作成版 –  shared: mainパッケージ以外をshared  library化して、-‐‑‒linksharedオプション でリンクできるようにする l  Golang  で  Shared  Library  を出⼒力力する。  -‐‑‒  Qiita l  Go  Execution  Modes l  Thanks  pepshiso! 9
  • 10.
    Execution  Tracing l  fine-‐‑‒grained (細かい粒粒度度)でのパフォーマンスモニタリングができるように なったらしい l  監視できるstats:それぞれの開始時間と、要した時間 –  Heap(GC) –  Goroutine –  スレッド –  GoのProcessorごとでのプロファイル u  システムコールの呼び出し・スタックトレース l  提案ドキュメントではnetwork  IOも対象だったが、パッチを⾒見見るとIO監視は 確認できなかった l  Go  Execution  Tracer:  http://golang.org/s/go15trace l  Groupsのスレッドでは、AMD  Code  AnalystやIntel  VTuneを意識識している発⾔言 も 10
  • 11.
    “vendoring”  external  package l Go⾔言語における  import  (go  get)のバージョン問題に対する実験的取り組み l  Goユーザの⼈人はご存じの通り、Goは依存する外部ライブラリのバージョン指 定する機能を提供してない –  これを解決するためにGodepコマンドのようなhackがある –  Go公式でvendoring(依存リポジトリを⾃自分のリポジトリに含める)⽅方法が実験的 にサポートされるようになる l  vendoringの詳細は次のNakashimaさんのエントリがかなり詳しい l  Go⾔言語のDependency/Vendoringの問題と今後.gbあるいはGo1.5  |  SOTA –  http://deeeet.com/writing/2015/06/26/golang-‐‑‒dependency-‐‑‒vendoring/ l  https://golang.org/s/go15vendor 11
  • 12.
    Concurrent  GC l  GCはStop the  worldとConcurrent  GCのハイブリッドを前から採⽤用していた。 1.5ではstop  the  worldからconcurrent  collectorになってGCによる停⽌止期間 を改善した様⼦子 –  GCのレイテンシを10ms以下を⽬目標としている l  GCによる停⽌止期間を短く、その代わりCPUとメモリ消費が少し増加 l  ほとんどのケースでgoroutineの並列列時のCPU使⽤用効率率率が上がるらしい l  デザインドキュメントあります(あまり読んでません) –  https://golang.org/s/go14gc –  https://golang.org/s/go15gcpacing l  Go  1.5以降降のガベージコレクタについてのプラン  –  Qiita –  http://qiita.com/ruiu/items/40a1d362417808c690a8 12
  • 13.
    Go  1.5を使ってみる l  ビルドは簡単 – Go  1.5  以降降のビルド⼿手順  –  Qiita –  http://qiita.com/orociic/items/b285cf205f75b7291a9d l  trace  コマンドを紹介(Execution  Tracing) –  $  go  test  -‐‑‒trace=/tmp/trace  -‐‑‒run=BenchName-‐‑‒bench=BenchName  –cpu=4 –  $  PATH=trace-‐‑‒viewer/tracing:$PATH  trace  -‐‑‒http=localhost:9876  path/to/ testbinary.test  /tmp/trace –  解説:  http://golang.org/s/go15trace 13
  • 14.
  • 15.
    Goの開発を追うには l  開発者による発表資料料が公開されているので読む(リンクも辿る) –  https://talks.golang.org l Design  Documentが公開されているので読む l  Google  Groupsのgolang-‐‑‒devを⾒見見る –  https://groups.google.com/forum/#!forum/golang-‐‑‒dev l  githubのリポジトリ、issueを⾒見見る –  今回は幸いにもリリース間近だったため、作成途中のリリースノートを参照できた –  https://github.com/golang/go 15
  • 16.
    まとめと感想 l  Go  1.5の新機能/変更更点を8⽉月予定のリリースに先⾏行行して紹介した l 情報を調べるにあたって既存スライド、リポジトリ、Design  Documentなど 開発のコア・近しい情報源をあたった –  1.5リリース後になれば、⽇日本語での資料料やまとめも増えてくると考えられる l  Go⾔言語ランタイム/コンパイラの開発スタイルは今回の調査で把握した –  Design  Documentを書いてGoogle  Groupsでコメントを募る形で議論論が進む –  (よく読んでないが)「Contribution  Guidelines」もある u  https://golang.org/doc/contribute.html 16