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"