アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

GoCon に参加して本当に良かった話

今回 CFP を提出して選ばれ、念願だった GoCon へ参加することができた。

そして、本当に良い体験をしたため忘れないうちに記録する。

この記事を読んでて GoCon に参加しようか迷っている人がいれば勇気を出して是非参加して欲しいと思っている。

こういう自分の好きな言語やサービスのコミュニティが開催する大きなイベントは、みんな自分と同じ共通の趣味を持っている人達だから、絶対に楽しい会話ができるため、沢山の人に話しかけてみるといいと思った。

なお登壇した内容の記事は以下のリンクで。

codehex.hateblo.jp

トークについて

どれもとても面白い内容のトークだったが、中でも kaneshin0120 さんの「How to write go code」を聞いて「こういう風なトークの形も在るんだ」と感慨深いものがあった。

内容は基本的にライブブラウジングで、Go 初心者がどのページを見ると幸せになれるかと言ったものだった。

見るべきリンクは以下に列挙しておく。

GoCon の裏で添削

牧さんからこういったリプも頂いたので喜んで電源部屋に行った。

添削してもらったことは結構多くて例えば

  • 三者にライブラリを使って貰う場合で、複数種類の構造体を扱う場面が有り、内部でどのようなタイプの構造体を今見ているか知りたいときこそ interface を使う
  • 基本 os.Pipe などは要らなくて、大体が io.Writer で補うことができる
  • context はツリー状の根の部分で扱うようにする、もしくはパイプラインのように考えて扱うことが可能

などなど、ここには書かないで独り占めしてる内容もあるがこれこそ、GoCon に参加できてよかったと思えるコンテンツだった。

懇親会が本番

有志で居酒屋に行った。そこには @davecheney も参加しており、何かお話をしたいと強く思っていた。そうすると隣に座ることができるチャンスが来たため、Keynote で話されていた Go の hashmap 実装の話の理解が正しいか確認をした。

Keynote では Go のハッシュマップはコンパイルタイムで hashmap 専用の関数に置き換えているという話をしていた。

それで「一時的に tmp ディレクトリ上で、置き換えられた新しいソースコードを作ってコンパイルしてるの?もしそうなら大量の map が書かれた場合、コンパイルは遅くならない?」といった感じの質問をした。

そうすると「そうではなくて、AST を作った段階で map の Node へアクセスしてその中身を hashmap 関数の Node として置き換えを行っている」というような説明をしてもらった。さらに、それに該当するソースコードまで見せてもらい解説までしてくれた。

  • まず、コンパイルタイムで hashmap の置き換えを行っている部分は以下の部分。

https://github.com/golang/go/blob/release-branch.go1.10/src/cmd/compile/internal/gc/walk.go#L779-L837

  • hashmap の delete は以下の部分になる。

https://github.com/golang/go/blob/release-branch.go1.10/src/cmd/compile/internal/gc/walk.go#L839-L852

それと Go のコンパイラソースコードを読むと gc など略されてるものが多く、これらはどういう意味を持つのかも教えてもらった。

  • gc == go compiler
  • ?a == assembler
  • ?c == c compiler
  • ?g == go compiler
  • ?l == linker

これらの省略記法は plan8 から始まっていて、最初の go compiler が plan9 を書いていた Ken Tompson の名残だということも教えてもらった。

全体を通して

カンファレンスとは言え、まだまだ小規模な感じのお祭りなので参加するなら今のうちに参加したほうが沢山の Go ハッカーとコミュニケーションが取れると思った。

そしてコミュニティに参加している人達は基本そのコミュニティに関連した会話をしたいので、みんな優しく接してくれる。

一言で言い表すことができないくらい最高だったのでオススメ。