2014年6月29日日曜日

Golang Cafe #35

6/22(日)に開催された「Golang Cafe #35」に参加してきました。

参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、+Hideki Matsuda さん、私の4名でした。

今回は「Go Conference 2014 springを開催しました #gocon」の中から「Five things that make Go fast」が選択され、「二 Inlining」まで読み進めました。

「Goを速くする5つの事柄」ということで、コーディングテクニックやイケてるパッケージの紹介かと思いきや、Goコンパイラーにおける速度向上の仕組みや工夫に関する内容でした。

個人的には好きな方の話だったので、都度、感心しながら読み進められました。

以下、ざっくり、かつ、超意訳にまみれた内容紹介ですm(__)m

最初に「Gopherに聞きました!Goを採用した理由トップ3」が紹介されていました。

  • 同時実行
  • デプロイが簡単
  • パフォーマンス

今回、Dave Cheneyさんはパフォーマンスを「Goの速さ」と捉えて説明されています。

一 Values

Goにてint32型で値を定義した場合は1byte/桁のメモリを消費します。(「2014」なら4byte)

Pythonでは何回もメモリを確保したり、Javaではプリミティブ型はGoに近いですがクラス型はVMのbit数に左右されるなど、落ち着きがありません。

メモリはより大容量になり、CPUはより高速になっているため、データをやりとりするバスの差は広がる一方ですが、その差を埋めるためにCPUキャッシュが導入されています。

Goは正確にメモリを確保するため、CPUキャッシュを有効に活用することができ、結果としてパフォーマンスの向上につながっています。

二 Inlining

関数呼び出しにはコストがかかり、そのオーバーヘッドを軽減させる技術として「関数のインライン化」があります。

インライン化のデメリットはバイナリーファイルのサイズが大きくなることです。

Goは単純な関数に対してインライン化を行います。複雑な関数では呼び出し時のオーバーヘッドは関数本体の処理に比べて影響が少ないためインライン化を行いません。

パッケージがコンパイルされる際、インライン化に適した単純な関数にマークが付けられます。

.a ファイルでは、コンパイラーが迅速に処理できるようにソースが少し変換されています。

コンパイラーは、到達不能なコードがあれば排除します。

Goコンパイラーはファイルやパッケージ全体に対して自動的に関数のインライン化を行います。これには標準ライブラリーからインライン化可能な関数を呼び出すコードが含まれています。

以上、ざっくり、かつ、超意訳にまみれた内容紹介でしたm(__)m

次回(本日 ^^;)は「Google I/O 2014」でのGo関連の資料を見て行く模様です。

2014年6月15日日曜日

Golang Cafe #34

6/15(日)に開催された「Golang Cafe #34」に参加してきました。

参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、+Hideki Matsuda さん、私の4名でした。

今回は「<htmlday> 2014」としての開催ということで、GAE/Goのチュートリアルの

 3. Hello, World!
 4. Using the Users Service
 5. Handling Forms
 6. Using the Datastore

を行いました。

書籍「Go言語プログラミング入門 on Google App Engine」の著者である横山さんに解説を入れてもらいつつ、コードを写経してローカルで実行して動作を確認しました。

チュートリアルということで、特に引っ掛かることもなく、久々のGoコーディングを味わいながら、進めることができました。

横山さん曰く「チュートリアルの内容は書籍を書いていた当時とあまり変わっていない」とのことでした。

同日、静岡県では「Shizuoka.go(Experimental)」が開催され、GAE/Goハンズオンが行われました。独学にも使えそうな資料を作成されていましたので、ご紹介させて頂きます。


これを機に、そろそろ?いよいよ?GAE/Goを使い始めたいと思います。みんなで使ってExperimentalを外して行きましょう!q@w@p

次回は「GoCon 2014 spring」資料の「Five things that make Go fast」を読み進めるようです。

2014年6月14日土曜日

Golang Cafe #33

6/8(日)に開催された「Golang Cafe #33」に参加してきました。

参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、+Hideki Matsuda さん、私の4名でした。

今回は「Go Conference 2014 spring」のKeynoteスライド「Go: 90% Perfect, 100% of the time.」を読み合わせました。

最初は63というページ数に圧倒されましたが、実際にはCafe中に余裕を持って読み終えることができましたし、英語もそこまで難しくないと思われますので、興味があればご一読下さい。

内容的には「新プロジェクトの開始に際してGoを採用した理由と結果」を「他言語との比較」や「Goの現状や足らず」を交えて解説されていました。

Cafe中には、たまに「After Go」ページの図で「そのGoの位置、良過ぎでは?(^^;)」とみんなでツッコミが入ったりもしました。

個人的に驚いた(?)のは「違和感なくスライドを読み進めることができた」ことでした。事例紹介なので元々わかりやすい内容なのだとは思うのですが「これは何の事だ?」と引っかかるような部分がほとんどありませんでした。

ほぼ毎週、半年以上「Golang Cafe」にも参加させて頂いており、自分にもそれなりにGo力が付いてきているのだなぁ、と感じた一日でしたq@w@p

次回(=本日^^;)は<htmlday>に合わせて久々の土曜日開催&GAE/Goとなるようです。楽しみ!

2014年6月7日土曜日

Golang Cafe #32

6/1(日)に開催された「Golang Cafe #32」に参加してきました。

参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、+Hideki Matsuda さん、私の4名でした。

今回は「Go Conference 2014 spring(以下、GoCon)」の翌日に開催ということで、GoConで発表された資料をピックアップして読み進める会となりました。

資料の一覧はGoCon主催者の山口さんのブログにまとめられています。


気になる題材とかでランダムにピックアップして、以下の順番で5つの資料を読み進めました。


本投稿は勉強会の開催報告の記事ということで、資料を見直しながらコメントを付けることが可能ですが、実際、当時は資料を見て行くのが精一杯でして(^^;)、また、資料だけでは作成者の意図を汲み取ることはできないと判断して、資料へのコメントは避けましたm(__)m

全体的には、

  • 何となく選んだ資料の順番が、意外にもそれらしい流れを形成していた。
  • 前回、シダ描画の改造に取り組んだおかげで(?)置き換えて考えやすかった。

という感じでした。

引き続き、Goのプロダクション投入に益々期待したいところです!q@w@p

次回はGopherCon 2014の終(つい)のセクションで発表された「Go for gophers」を読み進めるようです。

2014年6月1日日曜日

Golang Cafe #31

5/25(日)に開催された「Golang Cafe #31」に参加してきました。

参加者は主催の +Takashi Yokoyama さん、+Hideki Matsuda さん、私の3名でした。

今回は「Go Concurrency Patterns: Pipelines and cancellation」を読み進める予定でしたが、急遽「「プログラムでシダを描画する」をGoで描画する」をよりGoらしく書き直す会になりました。

Gopherらしく(?)すぐ目についたのは計算処理を同時実行させるところで、各自で書き直しを開始。Yokoyamaさんはゴルーチンで、Matsudaさんはsyncパッケージで、挑戦されていました。

私も「チャネルで同期をとりながらゴルーチンで実行させる」まではイメージできたのですが、いざ書き始めると、再帰関数に対して同時実行処理を適用させる(goを記述する)箇所を上手くイメージできずに手が止まりました。

後半はYokomayaさんが作成されたソースを拝見させて頂きながらあれこれ考えてみましたが、あまり進展もなく、そのまま時間切れとなりました。

先にプログラム全体を最適化する必要があるのかもしれません。例えば、f()関数には計算処理と描画処理が混在しているのでそれらを切り離したり、先に計算処理を行ってから最後に一気に描画する、など。

平日にでも何か改善できればと思っていましたが、上手く時間がとれず成果ゼロでしたm(__)m

次回は前日(5/31)の「Go Conference 2014 spring」での資料を読み合わせる予定です。

P.S.みんなもシダを描画してみよう! - 「「プログラムでシダを描画する」一覧