From: SASADA Koichi Date: 2009-06-16T11:05:58+09:00 Subject: [ruby-dev:38650] Re: [Feature: trunk] rb_objspace_each_objects  ささだです. SASADA Koichi wrote:: >> このcallbackですが >> >> (*callback)(VALUE *values, size_t run, void* data) >> >> でよいんでないですかね。「VALUEにstrideを足す」という操作が >> 不安です。 > >  これは,RVALUE の配列である heaps_slot を直接渡すんじゃなくて,一回 > VALUE の配列に live object をコピーして渡す,というインターフェースで > しょうか.今のところ,RVALUE のサイズは,gc.c 以外からは見れないように > なっています.それを隠蔽するための stride という引数になっています. > >  で,これはコピーのオーバヘッドを考えると,嫌だなぁ,と思います.この > API は,速いけど難しいインターフェースで取り扱い注意,というのだと弱いで > しょうか.  本件,まつもとさんとチャットで議論させてもらったんですが, ・速度的な問題があるのは認めるので stride でもよい ・start, end の型は VALUE よりは VALUE * に という話になりました. void rb_objspace_each_objects( enum objspace_walk_retval (*callback)(VALUE *start, VALUE *end, size_t stride, void *data), void *data0  こんな感じ.  とりあえず,難しいのは難しいので,コメントに,使うな,と書いておきます (詳しい説明と). -- // SASADA Koichi at atdot dot net