ささだです. 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