From: Akinori MUSHA Date: 2007-08-21T21:47:52+09:00 Subject: [ruby-list:43906] Re: Hashへの生成順は保障されないのか? --pgp-sign-Multipart_Tue_Aug_21_21:47:58_2007-1 Content-Type: text/plain; charset=ISO-2022-JP At Tue, 21 Aug 2007 19:29:11 +0900, SASADA Koichi wrote: > Akinori MUSHA wrote: > >  1.9 においても、 Hash という名前のクラスで順序を保証することには > > 反対です。別クラスにするか、せめて生成時オプションにしてほしい。 > >  理由はなんでしょう。実装上たまたま順序が保障されているというのは良 > いでしょうか。それとも、これも混乱を招く(保障されてると思ってどんど > んコードを書いちゃう人がいる)からダメでしょうか。  そうですね。まとめになってしまいますが、 1. 名実一致 Hash というその名称から、順序性を期待させるべきでない。 (この時点で大義がない) 2. 性能 メモリ使用量増加や速度低下をもたらし、今後の最適化の余地も 制限する。 3. 互換性 記法が変わらないため、コード断片を見ただけでは順序性を期待 しているのかどうか読み取れなくなる。これは他の言語や古い バージョンのRubyへの移植の妨げになる。 また、 shim (compatibility layer)を実装しようにも、大幅な 性能劣化を伴わずに実現できるか疑わしい。 などが理由です。 >  名前を変えるのは賛成なのですが、問題なのは多分リテラルで簡単に書け > るかどうかってことだと思うのですよねぇ。  リテラル表現を用意すると、バックポートしない限り下位互換性を 失いますが、それはさておき。  [ x1 => y1, ... ] だと順序付きマップを生成するとか?これは今は [{ x1 => y1, ... ]} と解釈されますが、文法的には配列と区別可能。  Set もそろそろ組み込みに…。こちらはもちろん { x, y, z, w }。 わかりにくいか! (j/k)  %m{ x1 => y1, ... } みたいなのもないことはないと思います。  が、そもそもリテラル記法が必要なほど多用されるかどうか。 -- / /__ __ Akinori.org / MUSHA.org / ) ) ) ) / FreeBSD.org / Ruby-lang.org Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp "Different eyes see different things, Different hearts beat on different strings -- But there are times for you and me when all such things agree" --pgp-sign-Multipart_Tue_Aug_21_21:47:58_2007-1 Content-Type: application/pgp-signature Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (FreeBSD) iD8DBQBGyt7+kgvvx5/Z4e4RAvRGAKCgqYhOPU+jpDpH5UxfCPw/Cc6JiQCgwIF7 AHppqnj0YHlvPDLZEwIeDz0= =EjB8 -----END PGP SIGNATURE----- --pgp-sign-Multipart_Tue_Aug_21_21:47:58_2007-1--