Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

20130316 プログラミング言語Go

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 38 Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Les utilisateurs ont également aimé (20)

Publicité

Similaire à 20130316 プログラミング言語Go (20)

Publicité

Plus récents (20)

20130316 プログラミング言語Go

  1. 1. プログラミング言語Goのご提 案 2013年3月 やまぐちよしふみ
  2. 2. メッセージ  21世紀のプログラミング言語で、クラ ウド時代を生き抜くコアインフラの最 適化を! 2
  3. 3. こういう話はしません 3
  4. 4. プログラミング言語 Goの紹介 山口 能迪 id : ymotongpoo 4
  5. 5. お前、誰よ? • 山口能迪(やまぐちよしふみ) • YouTube Technical Account Manager, Google Inc. • id: ymotongpoo – とんぷーと呼ばれています 5
  6. 6. お前、誰よ? • Pythonが好きです • 翻訳 「Java開発者のための関数プログラミング」 オライリー・ジャパン 2012年06月発行 1,365円 (Ebook) 「Learn You Some Erlang for Great Good!」 オーム社 絶賛翻訳中 価格未定 (がんばります...) 6
  7. 7. 今日は非常に簡単な Goの紹介をします 7
  8. 8. 細かい文法を知りたい人は http://tour.golang.org をやってください 8
  9. 9. もうちょっと充実した資料が SlideShareに あがってます (あとで見てね) 9
  10. 10. 今日は 機能概要と 事例紹介のみ 10
  11. 11. 機能概要 このへんをざーっと話します • 実行速度&ビルド • 言語仕様 • 標準パッケージ • 標準ツール 11
  12. 12. 実行速度 & ビルド 12
  13. 13. 実行速度&ビルド 実行速度 出典:The Computer Language Benchmarks Game LL Go http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.php 13
  14. 14. 実行速度&ビルド ビルド • ビルドファイルを作成する必要がない • 3rdパーティーパッケージは勝手に取得 ソースコード ビルド package hoge $ cd $GOPATH $ go get import ( $ go build -o main “github.com/foo/go-spam” $ ./main “bitbucket.org/gopher/bar” … ) func SomeProcess(…) {…} 14
  15. 15. 言語仕様 15
  16. 16. 言語仕様 強く柔軟な型付け 強い型付け ダメな例 良い例 type JPY float64 type JPY float64 type USD float64 type USD float64 func SomeFunc() JPY { func Exchange(u USD) JPY { j := JPY(1000) return JPY(u * 100) u := USD(10) } return j + u func SomeFunc() JPY { } j := JPY(1000) u := USD(10) return j + Exchange(u) 型推論 } 16
  17. 17. 言語仕様 強く柔軟な型付け 柔軟な型付け Goではstructとinterfaceが定義できる • struct – フィールドとメソッドを宣言/定義 • interface – メソッドの型定義のみを宣言 17
  18. 18. 言語仕様 強く柔軟な型付け 柔軟な型付け(例: io.Readerの定義) io.Readerの定義 type Reader interface { Read(p []byte) (n int, err error) } io.Readerとみなされる os.Fileの定義 type File struct { // filtered and private fields } func (f *File) Read(b []byte) (n int, err error) 18
  19. 19. 言語仕様 強く柔軟な型付け 柔軟な型付け(例: CSVファイルの読み込み) import ( “encoding/csv” os.Fileはio.Readerを実 “fmt” 装している “os” ) io.Readerを引数にとる … 関数 file, _ := os.Open(“hoge.csv”) reader := csv.NewReader(file) records, _ := reader.ReadAll() 記述力 大! for i, r := range records { fmt.Println(r[1]) } … 19
  20. 20. 言語仕様 Intel CPUと言語の歴史 8086-8088 i386 Pentium Xeon Pentium D Core Duo Xeon Quad Core i7 1978 1985 1993 2000 2005 2006 2008 マルチコアCPU時代 1971 1987 1995 2009 圧倒的現代感!!!!! 1983 1991 1993 2000 20
  21. 21. 言語仕様 並行プログラミング 言語仕様として並行プログラミングをサポート • goroutine • channel 21
  22. 22. 言語仕様 goroutine 簡単な記述で並列(非同期)処理が可能に 同期 非同期 Foo() go Foo() Bar() go Bar() SomeFunc() SomeFunc() “go” と書けば新しい goroutineが立ち上がる 22
  23. 23. 言語仕様 channel 複数のgoroutine間でのやり取りができる イメージ コード例 func ProcessA(c chan int) { … c <- SomeProcessA() Process B Process A … } Channel C func ProcessB(c chan int) { … SomeProcessB(<-c) … } 23
  24. 24. 標準パッケージ 24
  25. 25. 標準パッケージ 豊富な標準パッケージ “Battery included”と呼ばれるPython並 archive crypto database errors image net regexp unicode tar aes sql expvar color http syntax utf16 zip cipher driver flag draw cgi runtime utf8 bufio des debug fmt gif fcgi cgo unsafe builtin dsa dwarf go jpeg httptest debug bytes ecdsa elf ast png httputil pprof compress elliptic gosym build index pprof sort bzip2 hmac macho doc suffixarray mail strconv flate md5 pe parser io rpc strings gzip rand encoding printer ioutil jsonrpc sync lzw rc4 ascii85 scanner log smtp atomic zlib rsa asn1 token syslog textproto syscall container sha1 base32 hash math url testing heap sha256 base64 adler32 big os iotest list sha512 binary crc32 cmplx exec quick ring subtle csv crc64 rand signal text tls gob fnv mime user scanner x509 hex html multipart path tabwriter pkix json template filepath template pem reflect pars xml e time http://golang.org/pkg/ 25
  26. 26. 標準パッケージ 豊富な標準パッケージ 準標準パッケージ 標準ではないがコアメンバーが管理している レポジトリ名 crypto net image bcrypt otr dict bmp blowfish pbkdf2 html testdata bn256 poly1305 atom tiff cast5 ripemd160 testdata curve25519 salsa20 webkit md4 salsa scripted nacl scrypt idna box ssh ipv4 secretbox terminal proxy ocsp test publicsuffix openpgp twofish spdy armor xtea websocket clearsign xts elgamal errors packet https://code.google.com/p/go/source/browse?repo=xxxxx s2k 26
  27. 27. 標準ツール 27
  28. 28. 標準パッケージ 便利な標準ツール群 Goでの開発を助ける標準ツール • go build パッケージをビルド • go get 必要なパッケージを取得 • go install 必要なパッケージを取得&ビルド • go run 一時的にビルドし実行 • go test テストとベンチマークを実行 • gofmt フォーマットを直してくれる • godoc ドキュメントを生成 28
  29. 29. 事例紹介 29
  30. 30. 事例 vitess (YouTube) • vitess (vtocc) • MySQLのロードバランサ – YouTubeの全MySQLクエリをさばいている – Rowキャッシュとかもしてる • プレゼンはここで見られます 30
  31. 31. 事例 vitess (YouTube) • Goを採用した理由 1. CとPythonの間で書きやすく簡潔に書ける • ログローテーション 105行 • コネクションプール 227行 • memcacheクライアント 250行 2. ビルド&テストのサイクルが早い 3. 標準ライブラリが豊富で楽 4. 簡潔に書ける 31
  32. 32. 事例 Doozer (Heroku) • Doozer • PaxosのGo実装 • Goを採用した理由 1. 言語として並行性のサポート • goroutine 2. 標準パッケージが豊富 3. gofmt 4. 静的リンクのバイナリ 5. 文法が簡潔 32
  33. 33. 事例 IronWorker (Iron.io) • IronWorker • タスクキューサーバ – Ruby on Railsで書いてたAPIサーバをGoで書きなおした – 30台のサーバが2台に • Goを採用した理由 1. 言語として並行性のサポート 2. 標準パッケージの豊富さ 3. 簡潔 4. ビルドが早い 33
  34. 34. 事例 他の大きな事例 • SoundCloud – Bazookaと呼ばれるDoozerを使った社内デプロイ ツールを始め、多くの箇所で利用 • Canonical – JujuをPythonからGoに移行 • Atlassian – 仮想マシンクラスタのテストシステム • ngmoco:) – 独自HTTPサーバ & ロガー https://code.google.com/p/go-wiki/wiki/GoUsers 34
  35. 35. その他 35
  36. 36. Go 1.1 リリース間近 36
  37. 37. イベント告知 Go Conference 2013 spring http://connpass.com/event/1906/ 37
  38. 38. 38

Notes de l'éditeur

  • 3年前のPyFesでもりよしさんが発表したが、2012年3月のversion 1.0のリリースはかなり充実したものだった。プロダクション環境での利用事例も増えているのでぜひ試して貰いたい。
  • 20分という時間では語りきれない
  • 密度高く書きました
  • チャンネルにも型があるチャンネルに値を渡す/チャンネルから値を持ってくる演算子は矢印
  • 147の標準パッケージcrypto: 暗号化関係encoding: フォーマット関係image: 画像関係net: 通信関係testing: テストgo: Goのソースコード解析など
  • 全部紹介するのは大変なので下の3つだけ紹介
  • https://www.usenix.org/conference/lisa12/vitess-scaling-mysql-youtube-using-go
  • https://www.usenix.org/conference/lisa12/vitess-scaling-mysql-youtube-using-go動画ではビルドは3秒で終わると言っている他にもconcurrencyとcgoについて触れていた
  • Paxosは、信頼性の低い複数の処理ノードによるネットワークで「コンセンサス」を得るための各種手順Paxos自体は汎用的なアルゴリズムでさまざまな問題に適用できますが、最近のNoSQLの文脈で語られるのは「データストアをマルチマスター構成にしたときに、どうやってデータの整合性を効率的に確保するか」って問題へのPaxos応用です。Paxosは独立した並列なプロセスをメッセージパッシングで行うので、goroutine &amp; channelがはまったwebsocketとか便利だった(いまは準標準パッケージ)無駄な議論をしなくて済むようになったデプロイがすごく楽簡潔に書けてとてもよい
  • Jujuは「サービス実装・オーケストレーションフレームワーク」と呼ばれる管理ツールで、複数の物理/仮想サーバーを一括管理できる。http://backstage.soundcloud.com/tag/golang/

×