[#46329] [ruby-trunk - Feature #7252][Assigned] version number of 2.0 release — "usa (Usaku NAKAMURA)" <usa@...>

26 messages 2012/11/01

[#46350] RubySpecメンテナ — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

15 messages 2012/11/02

[#46414] [ruby-trunk - Bug #7287][Open] please rename atomic.h which conflicts with /usr/include/atomic.h in Solaris10 — "ngoto (Naohisa Goto)" <ngotogenome@...>

10 messages 2012/11/06

[#46434] トラップハンドラで許されない操作はなにか — KOSAKI Motohiro <kosaki.motohiro@...>

小崎です

9 messages 2012/11/06

[#46440] [ruby-trunk - Bug #7300][Open] Hash#[] の挙動が 1.9.3 と異なっている — "hsbt (Hiroshi SHIBATA)" <shibata.hiroshi@...>

12 messages 2012/11/07

[#46477] Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): — SASADA Koichi <ko1@...>

refinement を導入するときの性能に対する excuse が「method cache に殆どあ

20 messages 2012/11/11
[#46480] Re: Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): — Shugo Maeda <shugo@...> 2012/11/11

前田です。

[#46488] Re: Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): — SASADA Koichi <ko1@...> 2012/11/12

 ささだです.

[#46491] Re: Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): — Shugo Maeda <shugo@...> 2012/11/12

前田です。

[#46493] Re: Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): — SASADA Koichi <ko1@...> 2012/11/12

 ささだです.

[#46495] Re: Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): — Shugo Maeda <shugo@...> 2012/11/12

前田です。

[#46497] Re: Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): — SASADA Koichi <ko1@...> 2012/11/12

(2012/11/12 18:20), Shugo Maeda wrote:

[#46501] Re: Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): — Shugo Maeda <shugo@...> 2012/11/12

前田です。

[#46513] Re: Fwd: [ruby-changes:25559] shugo:r37616 (trunk): * vm_core.h (rb_call_info_t::refinements), compile.c (new_callinfo): — Nobuyoshi Nakada <nobu@...> 2012/11/14

なかだです。

[#46509] [ruby-trunk - Bug #7344][Open] gem pristine bigdecimal が失敗してしまう — "hsbt (Hiroshi SHIBATA)" <shibata.hiroshi@...>

31 messages 2012/11/13

[#46520] [ruby-trunk - Bug #7356][Open] ruby-2.0.0-preview1 で adlint-2.6.10 が性能劣化 — "yanoh (Yutaka Yanoh)" <yutaka@...>

11 messages 2012/11/15

[#46647] [ruby-trunk - Bug #7452][Assigned] Main thread is stopped after running finalizers if the main thread has a finalizer — "mrkn (Kenta Murata)" <muraken@...>

8 messages 2012/11/28

[ruby-dev:46434] トラップハンドラで許されない操作はなにか

From: KOSAKI Motohiro <kosaki.motohiro@...>
Date: 2012-11-06 19:37:07 UTC
List: ruby-dev #46434
小崎です

[Bug #7134] を調べていて深淵な仕様問題にはまってしまったので、みなさんの意見を聞きたく devにも振ります。

1.9.2p0 以降 (r20144
によるIOのシリアライズが入った後)、ほぼすべてのIOは暗黙にmutexをロックするので、メインスレッドとトラップハンドラが同時にIOをするとデッドロックで死にます。つまりトラップハンドラでIOすることは許されていなくてグローバル変数への書き込みだけが許されている(ほかにできることがあるだろうか?)

で、この仕様に文句をつけてる人がいます。色々なドキュメントのコード例でトラップハンドラがputs使ってるのを見るともっともだと思います。

ですが、よくよく考えてみると mutexがトラップハンドラで使えないこと自体も仕様には書かれていなくて、これは実装の都合です。実際
トラップハンドラでmutex使ってデッドロックした、なおせというバグレポートも過去ありました。番号探せないけど

さて、あるべき仕様とはなんでしょうか。以下の三択かと思います

1.現状のインプリが正しい。トラップハンドラはグローバル変数に書き込んですぐ抜けるべし
2.mutexはトラップハンドラで使えないが、IOは使えるべき。
3.mutexもIOもトラップハンドラから使えるべき


2だと、わたしが[Bug #7134]
にはったようなIO中はトラップハンドラのinvocationを禁止するマスク処理をいれるパッチになりますし、3なら、(以前ささださんが話していたように)トラップハンドラをメインスレッドで走らせるのをやめて専用スレッドで走らせるという解になります。

ところで、C言語でシグナルを専用スレッドで走らせることができないのは端的に言えばlongjmpで戻ってこれることを期待してる輩がいて互換性問題が発生するからですが、Rubyにも似たような問題があります。


http://stackoverflow.com/questions/2089421/capturing-ctrl-c-in-ruby

をみるとトラップハンドラからcatch/throwで抜けることをおすすめしている人がいます(もちろんこれは間違ってます。catchする前にthrowできちゃうから)

これをまじめに考えると
・そもそもトラップからthrowして制御を戻すのは合法か?
・throwで投げたオブジェクトをトラップハンドラスレッドからメインスレッドにキューで渡して非同期的に実行することは許されるか
・throwした瞬間はcatchブロックの中にいたけど、キューイングしてる間に
catchブロックから外れてしまったようなケースにおいてスクリプトからそれを観測する方法はあるか、またそれは救うべきか


というめんどくさい問題があるように思えます。正直もてあましているのでご意見お聞かせください

In This Thread

Prev Next