« Return to Thread: [ruby-list:43857] Hashへの生成順は保障されないのか?

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

by Tanaka Akira-3 :: Rate this Message:

Reply to Author | View in Thread

In article <87zm0kaz60.fsf@...>,
  Tanaka Akira <akr@...> writes:

> いきなりすごくでかくなる程って程じゃないですが、見てわかる影
> 響はあります。見比べると、st 関係が一番膨らんでるのは rdoc
> ですかね。

もうちょっと測った結果、どうもインスタンス変数を表現する
st (iv_tbl) が膨らんでるのが原因のようです。

インスタンス変数の順序を覚えてほしいと思う人は、まぁ、個人的
には pp と inspect でその順序を使いたいという気はしますが、
st_table_entry のフィールドをふたつ増やしてまでしたいかとい
うと、それほどには思いません。

とすると、st ぜんぶを順序つきにするのはさすがにやりすぎで、
やるにしても両方提供して、少なくとも iv_tbl は順序なしにする
のが順当のように思います。そうすれば、rdoc のケースでは、メ
モり消費はたいして増えないようになる感じがします。
(測った結果、インスタンス変数以外では Hash は出てこなくて、
むしろ Range が出てきたので、Hash は支配的でないように思う)

もちろん、rdoc のケースでそうだったからといってすべてのケー
スで問題ないとは限らないわけで、Hash をたくさんたくさんつか
うケースでは問題になるでしょう。

というわけで、Hash::Ordered とかとして別に作るのがいいんじゃ
ないですかね。

そして、リテラルの {} を Hash::Ordered にするとかどうですか
ね。{} にはどこにも hash という単語が出てきませんし、記法と
しても順序がありますし。まぁ、1次元の文字列でプログラムを書
く以上、順序の無い記法というのはまずありえないわけですが...
--
[田中 哲][たなか あきら][Tanaka Akira]

 « Return to Thread: [ruby-list:43857] Hashへの生成順は保障されないのか?