>From: matz / zetabits.com (Yukihiro Matsumoto)
>Subject: [ruby-ext:01333] Re: Q about reference to another object

> markってのは結構面倒な処理だからです。途中で回収される危険性
> はさほど問題にならないはずです。

それでmarkの処理に時間がかかるからですね。
ありがとうございます。

途中で回収される危険性ということで考えたのは、
前田さんの例をお借りすると、

struct foo {
    int count;
    VALUE obj;
};

static void mark_foo(struct foo *f)
{
    rb_gc_mark(f->obj);
}

static VALUE foo_s_new(VALUE self)
{
    ...
    f = ALLOC(struct foo);
    f->obj = rb_str_new(...);
    ...
    /* GC 発生 */
    ...
    return Data_Wrap_Struct(cFoo, mark_foo, free_foo, f);
}

というコードでは、f->obj に割り当てたオブジェクトは
/* GC 発生 */のところで回収されてしまうと思うのですが、
そういう理解で正しいですか?
でもこれはどちらかというとコーディングの問題かな。

田中昌宏