第1回RHG読書会を開催しました
4月 8th, 2009 admin Posted in CSNAGOYA, Ruby, 勉強会 |
RHG(Ruby Hacking Guide)と聞くと、どうしても「銀河ヒッチハイク・ガイド」を思い出してしまう私ですが、5日(日)にCSNagoyaとしてRHG読書会を開催しました。
Rubyのソースコードを読むという、CSNagoyaなのにカジュアルでもなんでもない内容ということもあって、また参加者1人の自習時代に戻る覚悟もしていましたが結局10人以上が集まる会になりました。
個人的な目標
僕は大きなコードを読んだことがないというのと、Rubyが好きなのだけど、いまいちRuby会議などで堂々とできない自分にサヨナラするのが目的なので
・ソースコードの読み方の作法とコツを習得
・Rubyistを名乗る
というのを目標にして参加しました。
まとめ
・Rubyのオブジェクトは構造体で、扱うときはVALUE型(unsigned long)のポインタ経由で扱う(unsigned longをポインタにキャストする)
・すべてのオブジェクトがstruct RBasic型のメンバbasicをもっていて、こいつが自分の構造体の型や各種フラグ、そしてクラスオブジェクトが格納されている
・VALUEがvoid*でないのは、小さな整数、シンボル、true、false、nil、QundefのときはVALUEに直接値を入れるため
・上記のような値と、オブジェクトのポインタとの値が重複しないように、整数は奇数の値、オブジェクトは4の倍数、シンボルは奇数ではなく4の倍数でもない数字にする、などという工夫がされている
・インスタンス変数を始めからもっているオブジェクトとそうでないのがある。これはメモリの無駄を省くため(RStringにインスタンス変数をセットして検証してみたい)
・struct RArrayはリストでは無い、以前にRubyでリストを自前で実装したら、Array.pushとかより高速に動作するようになって驚いたけど、そういうことらしい。
感想
C言語で書かれたオープンソースのコードを読むのは恥ずかしながら初めてだったので、まずソース(最初はruby.h)を開いただけでわくわくしました。難しいかと思われた内容も、本の解説がとても丁寧なおかげで今のところなんとかついていけているかなという感じです。
そして、いままでRailsでなんとなく使っていたシンボルの意味がよくわかったり、以前作ったリストが高速だった意味などが、それこそソースレベルで理解できてすごく気持ちがよかったです。
Rubyの歴史というのは10年程度で、それが長いのか短いのかわかりませんが、それでも10年以上もMatzを始めとする日本のスーパーハカーの人達が磨きに磨いたコードを読むというのは意外にもエキサイティングであり、贅沢なことなんだということを体感できました。こんなものが簡単に入手できてしまうオープンソースの文化に感謝をしつつ、次回の以降の勉強会にも取り組んでいきたいと思います。
Leave a Reply