まつもと ゆきひろです

In message "Re: [ruby-list:43927] Re: Hashへの生成順は保障されないのか?"
    on Fri, 24 Aug 2007 15:04:52 +0900, Yugui <yugui / yugui.sakura.ne.jp> writes:

|> そして、リテラルの {} を Hash::Ordered にするとかどうですか
|> ね。{} にはどこにも hash という単語が出てきませんし、記法と
|> しても順序がありますし。まぁ、1次元の文字列でプログラムを書
|> く以上、順序の無い記法というのはまずありえないわけですが...
|
|同意です。
| * Hashという名前である以上は順序は期待できないのが自然だと思います
| * 順序を保たないで効率を重視したい場合の選択肢を残して欲しいです。
| * リテラルには順序があるように見えるという意見には一理あります。
| * リテラル表記を用いる大部分のケースにおいて、順序を保つコストは
|   許容できると思います。
|
|なので
| * Hashクラスは現状維持
| * Hash::Orderedを新設
| * 従来ハッシュリテラルと呼ばれていた表記はHash::Orderedのリテラルに。
| * Hash[:a => 1, :b => 2]のような表記でHashのインスタンスを生成できればよい。

同意しません。

  * 全く同じ機能で性質だけ異なるクラスを複数用意するのは大ク
    ラス主義を標榜するRuby的でない

  * Hashという名前はHashアルゴリズムを使っていることしか意味
    しない。keyの登場順序があるかどうかはスコープ外。ただし、
    Rubyで順序があると他の言語で「順序はないのか」と騒ぐ人が
    居たりして、教育的問題が発生する可能性は否定しない。

  * 時間効率には順序を保たないかどうかは関係ない。

  * 空間効率にはある程度関係があるが、ちゃんとベンチマークを
    取ってみないとなにも言えない。それでも、どれだけ重大かは
    ケースバイケースだと思うけど。

  * とはいえ、インスタンス変数やシンボルテーブルにまで順序を
    保証するのはやりすぎなので、それはやめる方向で。

と考えています。ですから、将来ありえる組み合わせは

  * 1.8のまま、順序は導入しない
  * Hashに順序を導入する(ただし、インスタンス変数やシンボルテー
    ブルなどにはない)

のいずれかではないかと。気持ち的には後者に傾いています。

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