[#30872] segv when reentering into Fiber with callcc — sheepman <sheepman@...>
こんばんは、sheepman です。
ささだです。
遠藤と申します。
ささだです。
遠藤です。
ささだです。
まつもと ゆきひろです
In article <E1Hw9be-0002Rs-Qg@x31>,
まつもと ゆきひろです
[#30920] Integer#prime_division と Prime — TOYOFUKU Chikanobu <nobu_toyofuku@...>
豊福です。
[#30929] secrand.rb — "NAKAMURA, Hiroshi" <nakahiro@...>
-----BEGIN PGP SIGNED MESSAGE-----
In article <4669066C.2080307@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
In article <46694461.4060706@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
In article <46697C0B.8060402@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
In article <4669DAB0.4050705@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
In article <466AA73C.9030407@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
なかだです。
-----BEGIN PGP SIGNED MESSAGE-----
In article <466D5B1D.8030205@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
In article <469253E9.9010203@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE-----
In article <4694338C.7090303@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
In article <4694E6A6.2060303@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
なかだです。
-----BEGIN PGP SIGNED MESSAGE-----
なかだです。
-----BEGIN PGP SIGNED MESSAGE-----
[#30971] Linux/ia64で'ucontext_t' undeclared — akira yamada / やまだあきら <akira@...>
最近のRuby 1.9をLinux/ia64上でmakeしようとすると
まつもと ゆきひろです
Yukihiro Matsumoto さんは書きました:
まつもと ゆきひろです
Yukihiro Matsumoto さんは書きました:
まつもと ゆきひろです
In article <E1HygwQ-0001OA-4f@x31>,
ささだです。
[#30996] new block parameter rule — SASADA Koichi <ko1@...>
ささだです。
[#31002] ("a".."f").step(2) {|x| p x} — Tanaka Akira <akr@...>
string の range の step で引数が効かないように思います。
まつもと ゆきひろです
ささだです。
まつもと ゆきひろです
[#31028] rb_get_interned — Nobuyoshi Nakada <nobu@...>
なかだです。
[#31034] Re: [ruby-cvs:19815] Ruby:r12579 (trunk): * parse.y (rb_intern2): name may not be NUL-terminated. — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#31046] Conditional jump or move depends on uninitialised value(s) in TOPLEVEL_BINDING — Tanaka Akira <akr@...>
valgrind をかけたところとりあえず最初のが
ささだです。
[#31063] make error at bcc32 — "Nebata" <tnebata@...>
ねばたです。
[#31066] consts for gdb support — Nobuyoshi Nakada <nobu@...>
なかだです。
[#31068] $&;[] dumps core — "Yusuke ENDOH" <mame@...>
遠藤と申します。
ささだです。
遠藤です。
ささだです。
遠藤です。
[#31072] {*0} dumps core — "Yusuke ENDOH" <mame@...>
遠藤と申します。
ささだです。
[ruby-dev:30958] Re: Supporting Fiber
ささだです。
Yusuke ENDOH さんは書きました:
> 一般的な意味にあわせるのが一番いいと思います。
>
> 不勉強ながら私は fiber や coroutine 関連の論文や他言語の仕様を
> 読んだことがないので、その答えはわかりません。すみません。
> 私が [ruby-dev:30924] の挙動に違和感を覚えた理由は Fiber の意味を
> callcc の単純なラッパとして理解していて、それと同じ挙動を期待したからです。
> つまり、[ruby-dev:30924] は以下とほぼ等価かと。
>
> f = proc do |prev|
> p 1
> prev.call
> p 2
> end
>
> f2 = proc do |prev|
> callcc {|current| f.call(current) }
> end
>
> callcc {|current| f2.call(current) }
>
> # 脳内変換規則
> # Fiber.new ==> proc {|prev| ... }
> # Fiber#yield ==> callcc {|current| self.call(current) }
>
>
> しかしこの変換規則だと Fiber を導入する意味がほとんどなさそうなので
> こちらの方が一般的に採用されているとか、便利な例が多そうだということなら、
> 私の違和感は無視してください。
ほかの言語の例は実は試していないんですが、win32api の Fiber
は SEGV しました。これはあんまりだ。
確認しているのは lua と modula-2 なんですが、それぞれ Fiber
(Coroutine)の終了時にはどうなるのか教えてくれる人はいないで
すかね。lua なら試せるかな。
とりあえず、いくつかアプリケーションを作ってみてから考えたほ
うがいいような気がしています。
> あ、あと、呼び出しを Fiber.new { ... }.yield でくくるだけで挙動が変わる
> 関数が定義できてしまうことに抵抗があったというのもあります。
> そういう黒魔術は callcc だけでいい、みたいな。
>
> def foo
> Fiber.new do
> p 1
> Fiber.prev.yield
> p 2
> end.yield
> end
>
> # Fiber.new do
> # 何かいろいろやる
> foo
> # 何かいろいろやる
> # Fiber.new でくくっていると忘れた頃に p 2 が実行される
> # end.yield
表現力の高い coroutine を実現するための仕組みなので、(わか
らないと)不思議なことがあるのはそういうものかなぁ、と思いま
す。また、ほかの例でも同じような現象が起こります。たとえば、
Thread#pass(Thread#critical)では同じようなことが起こります
が、これは黒魔術でしょうか。
ただし、過剰な自由度は混乱させるだけな気もしています。なの
で、たとえば python のような制限付き coroutine のようにして提
供するのも一案かと思っています。
ちなみに、python では generator が終了したら例外を返します。
これはこれで納得できる話です。
--
// SASADA Koichi at atdot dot net