Mais conteúdo relacionado
Semelhante a 先取り Go1.5 (20)
Mais de Preferred Networks (20)
先取り Go1.5
- 3. ⾃自⼰己紹介
l 柏原秀蔵 (@suma90h) (Preferred Networks)
l 最近:Go⾔言語を書いてます
l 最近の活動
– システム系論論⽂文輪輪読会(論論⽂文読み会) 主催
– お菓⼦子作り(写真は古いですが、なんとか継続してます)
3
- 4. 概要
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
- 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
- 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