[#23884] Ruby 1.8.2 preview1にむけて — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

34 messages 2004/07/13
[#23917] Re: Ruby 1.8.2 preview1にむけて — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/07/16

山本です。

[#23920] Re: Ruby 1.8.2 preview1にむけて — "NAKAMURA, Hiroshi" <nakahiro@...> 2004/07/16

なひです。

[#23922] ruby 1.8.2 preview1 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

27 messages 2004/07/16

[#23995] String#each -> String#each_char — Shugo Maeda <shugo@...>

前田です。

27 messages 2004/07/30
[#23996] Re: String#each -> String#each_char — matz@... (Yukihiro Matsumoto) 2004/07/30

まつもと ゆきひろです

[#23997] Re: String#each -> String#each_char — "U.Nakamura" <usa@...> 2004/07/30

こんにちは、なかむら(う)です。

[#23999] Re: String#each -> String#each_char — matz@... (Yukihiro Matsumoto) 2004/07/30

まつもと ゆきひろです

[#24000] Re: String#each -> String#each_char — "U.Nakamura" <usa@...> 2004/07/30

こんにちは、なかむら(う)です。

[#24005] Re: String#each -> String#each_char — Minero Aoki <aamine@...> 2004/07/31

青木です。

[#24012] Re: String#each -> String#each_char — Shugo Maeda <shugo@...> 2004/08/01

前田です。

[#24014] Re: String#each -> String#each_char — Minero Aoki <aamine@...> 2004/08/02

青木です。

[ruby-dev:23980] Re: 引数の上書きとsuper

From: matz@... (Yukihiro Matsumoto)
Date: 2004-07-27 10:51:38 UTC
List: ruby-dev #23980
まつもと ゆきひろです

In message "[ruby-dev:23978] Re: 引数の上書きとsuper"
    on 04/07/27, SASADA Koichi <ko1@atdot.net> writes:

|> メソッド呼び出しごとにコピーしなくても、引数に代入した時点で
|> オンデマンドにコピーすればよいのでは、というか手元ではそう実
|> 装しちゃいました。
|
|という解決方法では,
|
|a. 引数と他のローカル変数アクセスの区別が必要になる
|b. コピー前とコピー後を区別する必要がある
|c. 結局引数に代入することを多用する人(例:私)には遅いまま
|
| という点で嫌です.

cは確かにあるかもしれませんが、それ以外はパフォーマンスは関
係ないですよね。笹田さんの立場からは当然なのかもしれません
が、まずは実装の話ではなく言語仕様の話がしたいです。

| 対案としては(無引数 super を zsuper と呼称します),
|
|A. zsuper を無くす
|
| 私は好きだし,互換性の問題から無くせないですよねぇ.

そうですね。

|B. "現在の仕様" を続ける
|
| 引数に代入するほうが悪い.
| 仕様に明記すれば問題ないのでは?

これは受け入れられません。

|C. 静的解析による解決,および eval による zsuper を禁止
|
| これは,コードを静的解析して,そのメソッド中で zsuper が現
|れた場合に,
|
|C1. そのメソッドで常に引数リストのコピーをとるようにする
|C2. または,最初に引数への代入が行われる前にコピーを取る
|
| と対処するという案です.

えーと、実装を考えつつ仕様を設計するのは悪いことではないです
が、実装の都合で言語仕様を決めるとろくなことはないです。

|D. 引数代入が起こる後の zsuper 禁止(eval 無視)
|
|def m a,b
|  ...
|  super # ok
|  a = 1
|  super # ng(例外?) 静的解析による
|end

この仕様で何が嬉しいか、ですよね。

| 本音は,あまり利用されない(だろう) zsuper のために,普遍
|的な部分で大きなコストを払いたくない,です.

それは理解できますが、今回のものはあんまり「普遍的」ではない
んじゃないかなあと思います。

---

どうせ誰も困ってないんで、変化するのは構わないんですが、変化
した後の挙動が(私にとって)納得できるものでないのは受け入れが
たいです。そういう点では笹田さんの案はどれも受け入れにくいで
す。

いっそ、

E. superの呼び出し時点で引数リストと同じものが省略されている
   とみなす

     def foo(a,b,c=200,*d)
       super   # super(a,b,c,*d)という意味(代入は反映される)
     end

というのもアリだと思います。

                                まつもと ゆきひろ /:|)

In This Thread