おはこんばんにちは。donkoです。
10/28日に開催されたGo Conference 2019 AutumnにWantedlyスカラシップ枠として参加させていただきました。
こういった大きなイベントへの参加は初めてでしたが、Goについての濃厚な話をたくさん聞くことができ、 非常に充実した1日でした。
Go Conferenceとスカラシップ枠
Go Conferenceは半年に1回行われるプログラミング言語Goに関するカンファレンスです。
一般参加枠などのほかに、スカラシップ枠が用意されています。 スカラシップ枠では、交通費や宿泊費が障壁となっていた遠方の学生が、 交通費・宿泊費の援助を受けながら、Go Conferenceに参加することができます。 Wantedlyさんの他に、mercariさんやMedia Doさんがスカラシップ枠を用意していました。
(Wantedlyのスカラシップ枠参加者の中には当日の登壇者もいて、スカラシップ参加者のレベルの高さを思い知らされましたorz)
セッション
自分が面白い・為になったと思うセッションを紹介させていただきます。
Go GC algorithm 101
Wantedly20卒内定のtaxioさんの発表です。
発表内容はGoにおけるガベージコレクション(GC)の理論と実装についての解説でした。 わかりやすい図や考察を交えた説明で、すんなりと内容を理解できました。
自分は低レイヤーやアルゴリズムの話題が好きで、このセッションはかなり面白かったです。 特にGCアルゴリズムの内容についてと、世代別GCに関する議論は興味深かったです。 今後、どのような改善がなされていくのか注目ですね。
実装してアルゴリズムごとの性能も見たいので、今度試してみたいと思います。
OSS Performance Tuning Tips
orisanoさんのOSSのパフォーマンスチューニングについての発表です。 チューニングする際の注意点やOSSにコミットする時に気をつけるべきことを丁寧に説明されていました。
orisanoさんが実際にパッチを送った体験談もいくつか紹介されていて、 wyhashのパフォーマンス改善をasmで頑張っていた話など、パフォーマンスチューニングの苦労がうかがえる場面もありました。
発表の中で、チューニングをするときのプロファイリングについて、いくつかのツールが紹介されていました。
GitHub - pkg/profile: Simple profiling for Go
使い方は非常に簡単で、main関数に一行差し込むだけで、関数レベルのプロファイルが取れます。
使ってみる
先ほどのpkg/profileを使ってみます。 適当なCLIのmain関数に以下を差し込みます。
defer profile.Start().Stop()
go run
を実行し、プロファイルを生成します。
先ほど生成したプロファイルをgo tool pprof
に渡すことでプロファイルの内容をみることができます。
go tool pprof
に-http
というフラグを渡すとブラウザでグラフやtopの結果を簡単にみることができます。
個人開発のパフォーマンス改善にも役立つと思うので、積極的に使っていきたいです。
Goでつくるゲームボーイエミュレータ、またはブラウザでの動かし方
bokuwebさんのGoで作成したゲームボーイエミュレータについての発表です。
実は自分もゲームボーイ(正確にはゲームボーイアドバンス)のゲーム開発をかじったことがあります。 「そういえばこんな感じだったなぁ」と、発表を聞いていくうちに記憶が呼び覚まされていきました笑。
エミュレータなので、CPUなどのハードウェアを実装しているのだろうと予想していましたが、 それはその通りで、レジスタの構造体のスライドでは一同大爆笑。
type Registers struct { A byte B byte C byte D byte E byte H byte L byte F byte }
コードベースのテストだけでなく、ゲームボーイの挙動を可視化してテストできるようにしていたところも いいなと思いました。 タイルマップが変更されていくのを見るだけでも面白そうです。
また、GoをwasmにビルドしてWebAssemblyとしてブラウザ上で遊べるようしているところには情熱を感じました。
(意外と難しい)
パフォーマンスやファイルサイズについては改善できるかもしれないということで、今後に期待です。
ちなみに、bokuwebさんはGoを学ぶためにこのエミュレーターを作ろうと考えたそうなので、 これからGoを始める方は挑戦してみてはいかがでしょうか(笑)。
Goコンパイラをゼロから作ってセルフホスト達成するまで
最後はDQNEOさんのGoコンパイラについての発表です。 もうタイトルからワクワクしますね。
Qiitaでかなり話題になっていたので、事前にどのようにしてコンパイラを作成していたのかは知っていたのですが、 DQNEOさんの情熱を直に感じることのできる発表で、終始聞き入っていました。
作成当時の小話をいくつか紹介してくださいました。 開発後半の自作interfaceや自作mallocの話は興味深かったですし、 panicのバグの話では会場が笑いに包まれました笑。
開発終了後に本家のGoコンパイラを読んだそうです。 自作のコンパイラと答え合わせをするかのように読んでいくと、 本家のGoの実装をより深く理解できそうですね。
自分はRui Ueyamaさんのコンパイラーブックをやりかけのままにしてしまっているので、 すきま時間を見つけて、また実装を進めていきたいです。 (いずれはGoでセルフホスト......!)
おわりに
Go Conferenceは、コンパイラなどの低レイヤーの話からゲームなどの話まで、 様々なジャンルのセッションを1日で聞くことのできる、数少ないイベントの一つだと思います。
学生であれば、スカラシップ枠などを有効活用して、臆せず参加してみましょう!
次は登壇して、Gopher人形をゲットしたいdonkoでした。
おまけ
抽選でTシャツが当たりました!やったー!Gopherかわいい!!
入園時にもらった名札です。
After Partyにも参加しました。 ご飯を食べながらTLを聞いて、お酒を飲んでいました。 最高に楽しかったです。