[#43857] Hashへの生成順は保障されないのか? — Hiroshi Kasamatsu <qqmn89yb9@...>

こんにちは、笠松と申します。

88 messages 2007/08/18
[#43858] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/18

Hiroshi Kasamatsu wrote:

[#43862] Re: Hashへの生成順は保障されないのか? — Hiroshi Kasamatsu <qqmn89yb9@...> 2007/08/19

皆さん、早速のレスありがとうございます。

[#43863] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/19

Hiroshi Kasamatsu wrote:

[#43870] Re: Hashへの生成順は保障されないのか? — Hiroshi Kasamatsu <qqmn89yb9@...> 2007/08/20

Urabeさん、笠松です。レスありがとうございます。

[#43872] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/20

Hiroshi Kasamatsu wrote:

[#43873] Re: Hashへの生成順は保障されないのか? — cuzic <cuzic@...> 2007/08/20

cuzic です。

[#43874] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/20

cuzic wrote:

[#43875] Re: Hashへの生成順は保障されないのか? — Tanaka Akira <akr@...> 2007/08/20

In article <46C9E7BB.4060100@ruby-lang.org>,

[#43876] Re: Hashへの生成順は保障されないのか? — Urabe Shyouhei <shyouhei@...> 2007/08/20

おお、田中さんを満足させる説明ってのは結構ハードル高そうだな。

[#43878] Re: Hashへの生成順は保障されないのか? — しん <dezawa@...> 2007/08/20

# 出遅れたので、レスすべきメールが判らなくなってしまったので、手近なのに

[#43879] Re: Hashへの生成順は保障されないのか? — Yukihiro Matsumoto <matz@...> 2007/08/20

まつもと ゆきひろです

[#43887] Re: Hashへの生成順は保障されないのか? — Nobuyoshi Nakada <nobu@...> 2007/08/21

なかだです。

[#43891] Re: Hashへの生成順は保障されないのか? — SASADA Koichi <ko1@...> 2007/08/21

 ささだです。

[#43892] Re: Hashへの生成順は保障されないのか? — Yukihiro Matsumoto <matz@...> 2007/08/21

まつもと ゆきひろです

[#43893] Re: Hashへの生成順は保障されないのか? — Nobuyoshi Nakada <nobu@...> 2007/08/21

なかだです。

[#43899] Re: Hashへの生成順は保障されないのか? — "Akinori MUSHA" <knu@...> 2007/08/21

At Tue, 21 Aug 2007 13:59:43 +0900,

[#43900] Re: Hashへの生成順は保障されないのか? — SASADA Koichi <ko1@...> 2007/08/21

 ささだです。

[#43906] Re: Hashへの生成順は保障されないのか? — "Akinori MUSHA" <knu@...> 2007/08/21

At Tue, 21 Aug 2007 19:29:11 +0900,

[#43921] Re: Hashへの生成順は保障されないのか? — Tanaka Akira <akr@...> 2007/08/22

In article <86sl6dgikh.knu@iDaemons.org>,

[#43926] Re: Hashへの生成順は保障されないのか? — Tanaka Akira <akr@...> 2007/08/23

In article <87zm0kaz60.fsf@fsij.org>,

[#43927] Re: Hashへの生成順は保障されないのか? — Yugui <yugui@...> 2007/08/24

Yuguiといいます。

[#43930] Re: Hashへの生成順は保障されないのか? — Yukihiro Matsumoto <matz@...> 2007/08/24

まつもと ゆきひろです

[ruby-list:43935] Re: Hashへの生成順は保障されないのか?

From: "Fujimoto Hisa" <hisa@...>
Date: 2007-08-24 12:17:22 UTC
List: ruby-list #43935
藤本です。

立場は、Hashリテラルの左から順が保証されるとうれしい派です。

# RubyCocoaでObjective-Cのメッセージ送信に使える

リテラルでの左から順の保証が実現するなら、それがどんなふうに実装される
かにはあまりこだわりはありません。なので「リテラルの実体=順序を保障す
る改良Hash」でも十分にありがたいのですが、さらに、現在のHashリテラルと
プログラミング上の互換性が維持されていれば、リテラルの実体はHashでなく
てもいいと思っています。

On 8/24/07, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
> 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に順序を導入する(ただし、インスタンス変数やシンボルテー
>     ブルなどにはない)
>
> のいずれかではないかと。気持ち的には後者に傾いています。

railsで多用されているようなキーワード引数のかわりなど、Hashリテラルの使
われ方としては:

  * 要素数が少なめ
  * 全てのキー値を使うことが多い
  * 新しい値を入れることは少ない
 * 左から順に繰り返す(とうれしい。この話題の発端)

というパターンが多いのではないかと思います(間違った推測かもしれません
が)。このタイプの使われ方に最適なのはどれか、あるいはたいして違いがない
のか。というところが、リテラルの実体にふさわしいデータ構造を選択する上
でのポイントのひとつだと思います。

もし、プログラミング上の互換性を維持できるより適切なデータ構造(どうなん
でしょう?>データ構造に詳しい方々)があれば、リテラルの実体をHashからそ
ちらに乗り換えるという選択もありうるのではないかと思います。

藤本尚邦(hisa)

In This Thread