Ruby九州会議を終えて

他の方のセッションも素晴らしくて、僕は出番も忘れて聞き入ってしまいました。
セッションの内容については、RubyKaigiで発表する事もあり、ここで伏せたいと思います。
リハーサルと言うことで非常にいい経験をさせてもらってヨカッタナーと思っています。
 

感想

僕の発表は18分くらいで終わってしまいました。リハしたときはきっかり30分だったのになぁ。
それで、長めの質疑応答の時間をとりましたが、さすがに5分くらいで時間がもたなくなり
「もういいっすかね!?」という形で強制終了しました。kill -KILL って感じ。
 
ここで問題になったのは私の質問への回答が不適切な点が多かったと言う事です。これは申し訳なかったですね。
冷静になると答えられるんだけども、その時は興奮していて答えられませんでした。
子供が口喧嘩した後に「あの時ああいえばよかったよねー」という感じなので、その回答を載せておきたいと思います。
質問された方はこっちの回答の方が参考になるかと思いますので、読んでいただければと思います。
 

RubyGCにReferenceCounterを使わない理由はなんでしょうか?

僕はこれに対して、

  • バグを生みやすい
  • カウント処理が遅い

という点を上げたんですが、質問者の方は納得してませんでした。
その方は自前で参照カウントとか作ったことがあって(Cなど)それでバグは生まれないだろうよと思ったのですね。
 
また

  • 循環参照

という問題が上がることもあらいさんに指摘されてお話ししました。
ですが、それも質問者の方は納得しておらず、循環参照はデータ構造の問題だろうという考えでした。
 
さて、ここで私と質問者の方に意識の違いが見て取れます。
私はRubyや言語に組み込まれたGCしか知らないわけなんですが、
この方はCでデータを解放するために作った、自前の参照カウントをベースに話されていたのですね。
つまり自分が参照カウント作るときは循環参照させるようなデータを作らないし、
カウントもバグも盛り込まないよー、という事です。
私はRubyGCの事しか考えて無かったので、こういう発想だとは思いもしませんでした。
 
ということを、懇親会でお互いに誤解をときました。いやはや、よかった。
「原因はgeneration gap だったね」と言われましたが、まさにその通りって感じですね。勉強になりました。
 

世代別GCとか入れらんないの?

  • 前パッチがあった
  • WriteBarrierが入ってその分のオーバヘッドで結果的に遅くなってしまった。

と言う事で納得していただけたようです。
WriteBarrierとか用語の説明って難しいので、ここは伏せておくか。
 

BoehmGCがよいと言われる理由は?

僕は

  • Boehmさんがチューニングしてて早いよー
  • BoehmさんはGC狂だからいいよー

って感じでお茶を濁したのですが、場の空気がふわっとなってしまいました。

これに対する正式な回答は

  • Mostly Parallelとか使ってある
  • Libraryとして提供されていて、各OSに対応したGCはこれだけと言ってよい
  • サイズが可変でも使える

とかでしょうか。これ以外あったら教えてほしいなぁ。
ちなみに今BoehmGC読んでます。
 

アプリを作る側からGCを作る側、まさに裏方ですが今の気持ちはどんな感じ?

  • みんながやらない事をやるのがいいですよねー
  • GCいいっすよ!

って感じでお茶を濁したのですが、場の空気がまたふわっとなってしまいました。
 

ってな感じで

懇親会でもアドバイス受けたので、色々と参考になりました。
いやー、有意義なイベントでした。