まつもと ゆきひろです
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 ??????
対応した方が良さそうですね。
まつもと ゆきひろ /:|}