From: SASADA Koichi Date: 2009-06-15T20:06:48+09:00 Subject: [ruby-dev:38633] Re: [Feature: trunk] rb_objspace_each_objects  ささだです. 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