なかだです。 At Fri, 10 Oct 2003 23:47:45 +0900, Yukihiro Matsumoto wrote: > |> 最終的にはrb_funcall_with_block()のようなAPIを用意するんじゃ > |> ないかと思います。 > | > |それはメソッド呼び出し専用ですよね。C用のAPIとしては直接使える > |block_pass()的なものも需要がありそうな気がします。 > > それはrb_iterate()なのでは? あ、blockとしてProcが使いたいと > いうこと? てことです。 関数 -> block rb_iterate() 関数 -> Proc rb_proc_new() block -> Proc rb_block_proc() Proc -> block rb_block_pass()? rb_proc_block()? > |それはそれとして、[ruby-dev:21568,21569]では不十分でした。 > |prot_tagだけではなくてネストするインタープリタの状態をすべて復 > |帰しないと、巻き戻されたスタック上のポインタをたどってしまうの > |で、スレッドの中からスレッドを作るときにまずいことになります。 > > 今まで指摘された問題が無いということであれば、コミットしても > いいといえばいいんですが、規模が大きいだけにちょっと不安があ > ります。 スタックを巻き戻すのはrb_thread_yield()を使ったときだけに限定し てるので、rb_protect()を特別扱いしなくてもいいような気がして来 ましたが、巻き戻す位置をスレッドごとに覚えておかなけりゃいけな そうです。 こういう構造体をrb_thread_tから参照するようにしたいんだけど、名 前が思い付かない…。 struct hoge { struct hoge *prev; struct FRAME *frame; struct SCOPE *scope; struct BLOCK *block; struct iter *iter; struct tag *tag; NODE *cref; }; 暫定版。 http://nokada.jin.gr.jp/ruby/rewinding-thread.diff -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦