Bug #803
closedeval with binding
Description
=begin
こんにちは、なかむら(う)です。
誰も教えてくれないのでbugにします。
これでなるのかな¶
In message "[ruby-dev:37142] eval with binding"
on Nov.21,2008 22:02:04, usa@garbagecollect.jp wrote:
以下の2つのコードが、1.8とtrunkで動作が異なります。
なぜでしょう?
私には1.8の挙動が自然に思えます。その1¶
x = 0
eval("p x", TOPLEVEL_BINDING)1.8 => 0¶
trunk => NameError¶
その2¶
BEGIN{$b = binding}
x = 0
eval("p x", $b)1.8 => NameError¶
trunk => 0¶
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by yugui (Yuki Sonoda) about 16 years ago
- Priority changed from 3 to 5
- Target version set to 1.9.1 Release Candidate
=begin
@ Ruby開発会議
- その1は頑張る
- その2は重要度低い。KNOWN BUG扱い。
=end
Updated by ko1 (Koichi Sasada) about 16 years ago
=begin
ささだです.
Yuki Sonoda wrote::
- その2は重要度低い。KNOWN BUG扱い。
KNOWN BUG というか,許されるのなら仕様変更にしたい.
(重要度は低そう,実装は大変)
--
// SASADA Koichi at atdot dot net
=end
Updated by ko1 (Koichi Sasada) almost 16 years ago
=begin
ささだです.
U.Nakamura wrote::
その1¶
x = 0
eval("p x", TOPLEVEL_BINDING)1.8 => 0¶
trunk => NameError¶
Index: vm.c¶
--- vm.c (リビジョン 20969)
+++ vm.c (作業コピー)
@@ -1240,7 +1240,10 @@ rb_iseq_eval(VALUE iseqval)
vm_set_top_stack(th, iseqval);
if (!rb_const_defined(rb_cObject, rb_intern("TOPLEVEL_BINDING"))) {
- rb_define_global_const("TOPLEVEL_BINDING", rb_binding_new());
- VALUE bind;
- rb_vm_set_finish_env(th); /* push dummy frame */
- rb_define_global_const("TOPLEVEL_BINDING", bind);
- vm_pop_frame(th); /* pop dummy frame /
}
val = vm_exec(th);
tmp = iseqval; / prohibit tail call optimization */
これで直るのではないかと思います.ご確認いただけませんか.
その2¶
BEGIN{$b = binding}
x = 0
eval("p x", $b)1.8 => NameError¶
trunk => 0¶
こちらは,前から書いていたとおり,仕様としていただけると.「こういう場
合に嫌だ」とか,そういう話ってありますかね.
--
// SASADA Koichi at atdot dot net
=end
Updated by usa (Usaku NAKAMURA) almost 16 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:37585] Re: [Bug:trunk] eval with binding"
on Dec.25,2008 00:20:48, ko1@atdot.net wrote:
これで直るのではないかと思います.ご確認いただけませんか.
変数bindに一度も値を代入したことがないのに直ることはありえな
いと思うんですが。
それはともかく、どこでも通用する再現ケースを示しても、報告者
が確認しないとダメですか。いや言われればやりますけどね。
その2¶
こちらは,前から書いていたとおり,仕様としていただけると.「こういう場
合に嫌だ」とか,そういう話ってありますかね.
そもそも「バグだ」と指摘しているわけではなくて、1.8と違うのは
なぜですか、と聞いているだけなので、理由さえ説明されていれば
違っていてもかまわないとは思います。
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by ko1 (Koichi Sasada) almost 16 years ago
=begin
ささだです.
U.Nakamura wrote::
変数bindに一度も値を代入したことがないのに直ることはありえな
いと思うんですが。
これに関してはコピペミスでした.で,投稿したパッチだと直らないことがわ
かったので,方針を変えて修正中です.かなりの大改修になりそうです.
それはともかく、どこでも通用する再現ケースを示しても、報告者
が確認しないとダメですか。いや言われればやりますけどね。
手元ではそのケースと make test に限り確認していたんですが,それ以外の
テストを行っていないので確認をお願いしたつもりでした.
(で,手元で小さいプログラムで確認したと思ったんだけど,直ってなかった.
おかしいなあ)
つまり,困ったプログラムがあったんだろう,そういうプログラムでもきちん
と動作するのか,エンバグをしていないか等,そちらの持っているプログラムで
確認してもらうようにお願いしたつもりでした.
(で,そもそも直ってなかった)
今回は,何を思ったか先にメールで確認しましたが,とりあえず,今後は気に
せずコミットしようと思います.
(テスト付きで)
その2¶
こちらは,前から書いていたとおり,仕様としていただけると.「こういう場
合に嫌だ」とか,そういう話ってありますかね.そもそも「バグだ」と指摘しているわけではなくて、1.8と違うのは
なぜですか、と聞いているだけなので、理由さえ説明されていれば
違っていてもかまわないとは思います。
理由は [ruby-dev:37376] で書いたとおり,「実装が大変」だからです.
まつもとさんに聞いたら,とくに問題ない(実装と1.8互換性の天秤にかけ
て,この互換性欠如が問題になることはないのではないか)という回答を得てい
ます.が,うささんには困った事情があったのではないかと推察します.その事
情がどれくらい問題であるか聞きたかった,ということです.
もし,その問題がまつもとさんに「これは直さないといかん」ということにな
れば,私は直すことになるかと思います.
この挙動自体は,BEGIN{} のスコープに関する私の勘違いからこのようになっ
ています.具体的には,BEGIN{} を iseq の先頭にくっつけるような実装にして
いる.
--
// SASADA Koichi at atdot dot net
=end
Updated by usa (Usaku NAKAMURA) almost 16 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:37600] Re: [Bug:trunk] eval with binding"
on Dec.26,2008 07:58:59, ko1@atdot.net wrote:
つまり,困ったプログラムがあったんだろう,そういうプログラムでもきちん
と動作するのか,エンバグをしていないか等,そちらの持っているプログラムで
確認してもらうようにお願いしたつもりでした.
話の元はIRCでの遠藤さんとの雑談(「rubyで〜〜なことができるか」
というクイズ)だったので、他の何の前提もなく、問題ケースその1
のコードが書かれています。
なので、私の手元で特にこれが原因で困ったプログラムがあるわけ
ではありません。
ただし、この挙動を前提としたコードをどこかで見た記憶はあるの
で(私が書いたものじゃないですが)、世界のどこかにはこれで困る
ことになる人はいるだろうと思われます。
そもそも「バグだ」と指摘しているわけではなくて、1.8と違うのは
なぜですか、と聞いているだけなので、理由さえ説明されていれば
違っていてもかまわないとは思います。理由は [ruby-dev:37376] で書いたとおり,「実装が大変」だからです.
まつもとさんに聞いたら,とくに問題ない(実装と1.8互換性の天秤にかけ
て,この互換性欠如が問題になることはないのではないか)という回答を得てい
ます.が,うささんには困った事情があったのではないかと推察します.その事
情がどれくらい問題であるか聞きたかった,ということです.
その2については、その1の元となったクイズをいかに1.9で解くか、
という点からひねり出したものなので、正直挙動自体はどうでもい
いです。
私に関してはruby_1_8ブランチが切られてからずっとtrunk使ってる
ので今更1.8と互換性がない部分があったのに気づいた、とかいうこ
とがあっても何も困りません。
昨日までのtrunkと今日のtrunkで違うよ、とかいうことがあった¶
らさすがに困りますが :)¶
ただ、説明されていない非互換性はバグとしか考えようがありませ
んから、バグじゃないなら説明をしてね、と言ってるだけです。
本件については、非互換であること自体は当初から一度も問題には
していないつもりです。
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by ko1 (Koichi Sasada) almost 16 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
=begin
Applied in changeset r21079.
=end