[#30872] segv when reentering into Fiber with callcc — sheepman <sheepman@...>

こんばんは、sheepman です。

15 messages 2007/06/01
[#30899] Re: segv when reentering into Fiber with callcc — SASADA Koichi <ko1@...> 2007/06/06

 ささだです。

[#30905] Re: segv when reentering into Fiber with callcc — "Yusuke ENDOH" <mame@...> 2007/06/06

遠藤と申します。

[#30906] Re: segv when reentering into Fiber with callcc — SASADA Koichi <ko1@...> 2007/06/06

 ささだです。

[#30929] secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...>

-----BEGIN PGP SIGNED MESSAGE-----

51 messages 2007/06/08
[#30930] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/08

In article <4669066C.2080307@sarion.co.jp>,

[#30934] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/08

-----BEGIN PGP SIGNED MESSAGE-----

[#30935] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/08

In article <46694461.4060706@sarion.co.jp>,

[#30936] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/08

-----BEGIN PGP SIGNED MESSAGE-----

[#30938] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/08

In article <46697C0B.8060402@sarion.co.jp>,

[#30939] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/08

-----BEGIN PGP SIGNED MESSAGE-----

[#30940] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/08

In article <4669DAB0.4050705@sarion.co.jp>,

[#30944] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/09

-----BEGIN PGP SIGNED MESSAGE-----

[#30945] Re: secrand.rb — Tanaka Akira <akr@...> 2007/06/09

In article <466AA73C.9030407@sarion.co.jp>,

[#30946] Re: secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/06/09

-----BEGIN PGP SIGNED MESSAGE-----

[#30950] Re: secrand.rb — Nobuyoshi Nakada <nobu@...> 2007/06/11

なかだです。

[#31173] Re: Random — Tanaka Akira <akr@...> 2007/07/10

In article <469253E9.9010203@sarion.co.jp>,

[#31174] Re: Random — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/07/10

-----BEGIN PGP SIGNED MESSAGE-----

[#31178] Re: Random — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/07/11

-----BEGIN PGP SIGNED MESSAGE-----

[#31179] Re: Random — Tanaka Akira <akr@...> 2007/07/11

In article <4694338C.7090303@sarion.co.jp>,

[#31183] Re: Random — "NAKAMURA, Hiroshi" <nakahiro@...> 2007/07/11

-----BEGIN PGP SIGNED MESSAGE-----

[#30971] Linux/ia64で'ucontext_t' undeclared — akira yamada / やまだあきら <akira@...>

最近のRuby 1.9をLinux/ia64上でmakeしようとすると

16 messages 2007/06/13
[#30973] Re: Linux/ia64で'ucontext_t' undeclared — Yukihiro Matsumoto <matz@...> 2007/06/13

まつもと ゆきひろです

[#30974] Re: Linux/ia64で'ucontext_t' undeclared — akira@... 2007/06/13

Yukihiro Matsumoto さんは書きました:

[#30975] Re: Linux/ia64で'ucontext_t' undeclared — Yukihiro Matsumoto <matz@...> 2007/06/13

まつもと ゆきひろです

[ruby-dev:31019] Re: ("a".."f").step(2) {|x| p x}

From: "NARUSE, Yui" <naruse@...>
Date: 2007-06-18 11:09:39 UTC
List: ruby-dev #31019
成瀬です。

SASADA Koichi wrote:
>  ささだです。
> 
>  成瀬さん、ソースを読んでくれてありがとうございました。ここで
> 大事なのは rb_iterate に渡す関数から rb_call0 が呼ばれていない
> ということです。

rb_call0 は 1.9 では存在しませんが、th_call0 ですよね。なるほど、本来は
rb_funcall 経由で th_call0 が呼ばれるはずだったのですか、通りでソース
追ってもたどり着かないわけだ・・・。

>  rb_iterate が何をするのか、その定義はよくわからなかったので
> すが、リファレンスマニュアルをみると次のようになっています。
> 
>> まず call_proc(data1) を実行します。そしてその関数かその直下のメソッドで yield が発生すると以下が実行されます。 
> 
>  (1)「その関数か」(2)「その直下のメソッド」という定義を、私は
> (2) だけ、というように実装したということになります。これは、
> NODE_ITER の使い方、および enum.c での利用法を見てそのように判
> 断しました(てっきり、(2) の使い方だけかと思っていた)。(1) に
> 依存したプログラムってどれくらいあるでしょうか。直すのは結構大
> 変そうです。
> 
>  なので、現在の rb_iterate() の仕様による解決方法は
> str_step() で rb_funcall() で何らかのメソッドを呼べばよいとい
> うことになります。

これって、一度 Ruby の層まで上らない bl_proc が呼ばれないということです
よね。it_proc ほどではないにしても、bl_proc のように何度も呼ばれる部分が
必ず Ruby 層経由というのは少し気になります。

>  「ひとつのスタックフレームには 1 つのブロック渡ししか対応し
> ていません」の意味ですが、まず ('a' .. 'b').step(2){ (A) } で
> は、Range#step に、1つのブロック渡しをされています。その時点
> で、このスタックフレームには1つのブロックが登録されたことにな
> ります。
> 
>  rb_iterate() を実行すると、「次のメソッド呼び出し時に C で記
> 述したブロックを渡す」という意味となります(同じスタックフレー
> ムに複数のブロックは積めない)。なので、Range#step 処理中(同
> じスタックフレーム)で yield したときの挙動は (A) を呼び出す、
> ということになります。たとえば、Range#step が String#step を呼
> び出せば、正しく動きます(exclを渡す方法がないんだけど)。

rb_define_method(rb_cString, "upto_excl", rb_str_upto, 2);
とでも定義して、str_step から
return rb_funcall(args[0], rb_intern("upto_excl"), 2, args[1],
EXCL(args[2]));
と呼べばいいのですかね。
なんか冗長な気はしますが。

-- 
NARUSE, Yui  <naruse@airemix.com>
DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA

In This Thread