うえの@ぶるーすかいです。

.gz なファイルを読み書きするクラスを C で書き直しました。

  http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.1.0.tar.gz


Ruby/zlib を書いている時にいくつか気になった点があるので列挙します。

1. eval.c 内の rb_respond_to の定義なんですが、
   これだと int ではなくて VALUE では?

     int
     rb_respond_to(obj, id)
         ..snip..
     {
         if (rb_method_boundp(CLASS_OF(obj), id, 0)) {
             return Qtrue;
         }
         return Qfalse;
     }


2. io.c 内の rb_io_puts や rb_io_print 等が static に
   なっていますけど、static でなければ

     klass = rb_define_class("Hoge", rb_cObject);
     rb_define_method(klass, "write", hoge_write);
     rb_define_method(klass, "<<", rb_io_addstr);
     rb_define_method(klass, "printf", rb_io_printf);
     rb_define_method(klass, "puts", rb_io_puts);
     rb_define_method(klass, "print", rb_io_print);

   と手抜きができて幸せかも。
   # モジュール化して頂けるともっと幸せかも?


3. IO#rewind と IO#lineno について。

     f = open("hoge")
     p f.lineno        # => 0
     f.gets
     f.gets
     p f.lineno        # => 2
     f.rewind
     p f.lineno        # => 2  ??????



-=====--===-
   うえの かつひろ @ BLUE-SKYNET    <unnie / blue.sky.or.jp>  --=
---=----===-                    http://www.blue.sky.or.jp/  -==