From: Yukihiro Matsumoto Date: 2007-04-10T00:39:15+09:00 Subject: [ruby-dev:30706] Re: ruby-1.8.6, $SAFE=4, Proc#call まつもと ゆきひろです In message "Re: [ruby-dev:30705] ruby-1.8.6, $SAFE=4, Proc#call" on Tue, 10 Apr 2007 00:27:15 +0900, Masatoshi SEKI writes: |Proc#callとyieldで、Procが実行される際の$SAFEが異なります。 |まつもとさんはProc#callの挙動が意図したものである、とのことでした。(あってますか?>まつもとさん) | |yieldの挙動をProc#callと揃える予定はありますか? | |スレッドを作って$SAFE = 4でなにかを実行するのにyieldをよく使っていたのですが、 |yieldもProc#callの挙動に揃えるとすると、ちょっと面倒です。 まず、Procは元の場所の$SAFEの状態を覚えていますから、 Proc#callの挙動は意図通りです(あってます)。これは信頼できる コードかどうかはその文脈で決まると認識しているからです。信頼 できないコードから呼ばれても、ブロックの信頼性が下がるわけで はない。しかし、現状yieldは元のコンテキストの$SAFEの状態を復 元しませんから、この点で一貫性が無いと言えるでしょう。 ですから、(どのタイミングかちょっと決めかねますが)いずれ揃え るべきでしょう。が、一時的に$SAFEを変更してブロックを実行し たいというニーズがあるということですから、それに対する救済策 も同時に用意しないとまずいんでしょうね。 まつもと ゆきひろ /:|)