まつもと ゆきひろです

In message "Re: [ruby-dev:27010] Re: [proposal] ANSI style function"
    on Sat, 10 Sep 2005 22:35:16 +0900, H.Yamamoto <ocean / m2.ccsnet.ne.jp> writes:
|
|山本です。
|
|rb_thread_create なのですが、こうなっていて
|
|VALUE
|rb_thread_create(VALUE (*fn) (/* ??? */), void *arg)
|{
|    Init_stack((VALUE*)&arg);
|    return rb_thread_start_0(fn, (VALUE)arg, rb_thread_alloc(rb_cThread));
|}
|
|こうなっています。
|
|static VALUE
|rb_thread_start_0(VALUE (*fn) (VALUE, rb_thread_t), VALUE arg, rb_thread_t th)
|{
|
|なので /* ??? */ は VALUE, rb_thread_t であるべきようにも思うのですが、rb_thread_t
|は eval.c 内部で定義されている型であり、外部には公開されていません。これをどうすべき
|でしょうか。

rb_thread_yieldにはthを渡したいが、他の関数には渡す必要はあ
りません。が、たかだかこのためにコードをコピーしたくありませ
んし、やロジックを複雑にする無駄な条件分岐を導入したくもあり
ません。

# なんかますますANSI prototypeが嫌いになってきた

この辺はANSI prototypeによるうれしさとはあんまり関係ないんで、
古い形式のまま放置するってわけにはいかないんですかね。