関西Ruby会議09で発表しました
先月、滋賀県大津市で行われた関西Ruby会議09に参加しました。
楽しんでいただけたようでよかったです。大津市は地元なので、場所が発表されたときからぜひ登壇したいと思っていたのでした。
内容は、最近のRubyに入った「Modular GC」という機能を使ってカスタムのGCを作成し、GC状況をraylibで可視化するという話でした。主に性能向上のために入った機能ですが、こういう学習用途にも便利に使えると思います。
スライドについて
以下、振り返りと反省を兼ねて各スライドについて何を考えていたのかメモしておきます。
出囃子
最近の関西Ruby会議には「出囃子」という謎の文化があるみたいで、事前に伝えた曲を入場時に流してくれます。今回は発表タイトルのもとになったこれでお願いしました。
入場
舞台が能楽堂(!)ということで神妙に歩こうと思ったが、笑っちゃった。無理。
前口上
能楽堂には必ず松の絵が書いてあって、これは神様への奉納という意味で〜みたいな話をしました。特殊な舞台をお借りしているので、「場への敬意」みたいなものをみなさんと共有したかったのです。
琵琶湖は滋賀県の6分の1
(元)県民アピールです。他には「琵琶湖にはたくさんの川が流入しているが、流出は瀬田川1本のみ」などがあります。
まず... GCとは何か...
ネットミームです。が、特に知っている必要はないです。小ネタに関しては基本、知らなくても大丈夫な範囲にとどめるのが良いと考えています。ただ知っている人に対しては、単に「GCとは何か」と書くよりも追加のニュアンス(説明の一番初めからやるということ)が伝わるという仕掛けです。
「そこまでは知っている」
最近無料公開でHUNTERxHUNTERが流行ってたので入れたくなりました。あと、これがないと「GCとか既に知ってるよ」という人が油断しそうなので。
GCはメモリの払い出しも担当する
これ、結構意外じゃないですか?僕も今回のスライドを作るまであまり意識してない点でした。
メモリとは何か
このあたりは「アドレス」という概念を説明しとかないといけないと思って入れたはずなんですが、最終稿ではアドレスという単語が出てこなかったので別に要らなかったなあ。
どっちかというと大事なのは「GCは最初に大きなメモリの塊を確保する」という方ですね。はじめは「GCはOSからメモリの塊をもらう」と書いてたんですが、調べてみると必ずしもそうでないことがわかり、メモリアロケータのスライドを挿れています。
ここは正確性を担保するだけの説明なので、発表では「正確にはメモリアロケータが間に挟まることもあるんですが、それはともかく〜」みたいな感じで表示時間1秒で次に進んでいます。そういうテクニックもあります。
GCアルゴリズムの進化図
何度か出てくる図です。文字が小さいですが、読んでもらうためのものではない(大きく2系統あって、今回は右側の話をするという点だけが重要)なので大丈夫です。
必要かどうかの判定
あとでマークとスイープという話が出てくるのでその準備です。
RubyのModular GC
分割前のgc.cがでかすぎて面白かったのでその話をしました。
カスタムGCの作成
Modular GCで新しいGCを作るには、という章です。一番難しいところです。特にp.48は説明が下手すぎて誰にも伝わってない説ある。まあでもスライド作るときの理解って
- わからない
- なんとなく分かるが、言葉にできない
- なんとなく言葉にできる(他人に伝わるかは不明)
- 他人がわかるように説明できる
というような段階があって、全要素を4まで詰められればいいんですけど、時間は有限なので、実際にはこうやって3みたいな部分が残ってしまうこともあります。
sweepフェーズ
スライドには書いてないんですが、口頭では「このへんは実装次第かな」と補足して軽く流しています。時計を見て、時間が余りそうだったらもう少し解説するというテクです。
GC中に余計なことをしてもよい
今回の一番面白いところ(interestingのほう)です。実際、GC中にGUIライブラリでウィンドウを開くみたいなことをしたらどうなるか全くわからなかったんですが、意外に動くもんですね。
ボタンを押すとGCが進むゲーム
実はこの「Modular GCを使えばGCを人力でやるゲームができるんじゃないか」というのが今回の発表の着想でした。本当はコントローラをお客さんに渡してプレイしてもらうつもりだったんですが、舞台から客席までちょっと距離があって、物を受け渡したりする感じではなかったので、自分でやることにしました。
その他
発表後、廊下雑談で「前日夜にデモが動かないことが発覚」とか「割り算がnilになるバグ」とかの話をしたんですが、今思うとこれもスライドに入れたらよかったですね。こういう「他人に話したくなる事件」は積極的に入れたらよさそう。