ささだです.

Yukihiro Matsumoto wrote::
> |>  なんて名前がいいでしょうかね.
> |
> | ちょっと考えたのですが,こんなのはどうでしょうか.
> |
> |void rb_objspace_walk_heaps(
> |    enum objspace_walk_retval (*callback)(VALUE start, VALUE end,
> |                               size_t stride, void *data),
> |    void *data);
> 
> このcallbackですが
> 
>   (*callback)(VALUE *values, size_t run, void* data)
> 
> でよいんでないですかね。「VALUEにstrideを足す」という操作が
> 不安です。

 これは,RVALUE の配列である heaps_slot を直接渡すんじゃなくて,一回
VALUE の配列に live object をコピーして渡す,というインターフェースで
しょうか.今のところ,RVALUE のサイズは,gc.c 以外からは見れないように
なっています.それを隠蔽するための stride という引数になっています.

 で,これはコピーのオーバヘッドを考えると,嫌だなぁ,と思います.この
API は,速いけど難しいインターフェースで取り扱い注意,というのだと弱いで
しょうか.


> | こんな感じで 生きているオブジェクトを全部回ることができる,というイン
> |ターフェースです.なお,free cell は渡されない可能性があります.
> |walk_heaps だと,free cell 含めて渡らないとまずいかなぁ.
> 
> free cellは要らないんじゃないですかね。あと、heapというのは
> Ruby GCの外では違う意味であるというakrさんの指摘もありますね。
> objspace_walk_objectsで良いような気もします。

 こちらはそれで.ちなみに,RVALUE の配列を直接渡すことを考えていたの
で,free cell が入る,ということだったんですが.

-- 
// SASADA Koichi at atdot dot net