まつもと ゆきひろです

In message "[ruby-list:23284] Ruby/zlib"
    on 00/06/16, Ueno Katsuhiro <unnie / blue.sky.or.jp> writes:

|.gz なファイルを読み書きするクラスを C で書き直しました。
|
|  http://www.blue.sky.or.jp/atelier/ruby/ruby-zlib-0.1.0.tar.gz

RAAにも登録しませんか? それとももう登録した? (未確認)

|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;
|     }

rb_respond_to()はCから真偽判定のため呼ばれることを想定してい
ます。だからint。Qtrue, Qfalseは整数定数なのでintでOKです。
|
|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);
|
|   と手抜きができて幸せかも。
|   # モジュール化して頂けるともっと幸せかも?

rb_io_xxxはT_FILEを要求するんですが、その辺は問題ないですか?

|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  ??????

対応した方が良さそうですね。

                                まつもと ゆきひろ /:|}