[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:538

From: shudo computer.org
Date: Thu, 21 Jul 2005 15:20:41 +0900 (JST)
Subject: [yarv-dev:538] Re: [im]mutable string

ささださん、皆様、首藤です。

> http://www.namikilab.tuat.ac.jp/~sasada/diary/200507.html#d20
> で、「文字列は mutable か immutable、どちらがいいか」みたいな議論が
> ちょっとありました。

ハッシュ表のキーとして使うケースが気になって、
ruby の実装を調べました。

キーが String のインスタンスである場合には特別扱いして、
frozen なコピーを作って実際にはそれをキーとして使う、んですね。

キーとして使われた String インスタンスの中身が破壊的メソッドで
変更された場合でも、ハッシュ表に登録された時点のキーで引けるように、
という配慮なのだと思います。

ただ、String 以外のインスタンスをキーとした場合には、
登録後にキーの中身が変更されてハッシュ値が変わった場合には
容赦なく orphan (?) になる (引けなくなる) ので、
String だけの特別扱いというのはどこか気持ち悪さが残ります。


> b. 実行効率の高さ(トータルな計算時間)
> b.1: immutable だとリテラルごとに文字列生成する必要がなくなって効率的
> (共有、非共有などが処理系の都合で柔軟に行える)
> b.2: immutable だと排他制御気にしなくていいので
> b.3: mutable だと文字列変更操作が使えるのでそのつど新しい文字列を生成し
> なくてよいので効率的(bang メソッドが使える、etc)

ruby の String に限定して言えば、
前述の配慮のために、ハッシュ表への登録時にコピーを作るから効率が悪い、
とも言える?


Kazuyuki Shudo/首藤一幸   私をたばねないで あらせいとうの花のように
  shudo computer.org   http://www.shudo.net/

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       536 2005-07-21 15:05 [ko1 atdot.net       ] [im]mutable string                      
->     538 2005-07-21 15:20 ┣[shudo computer.org  ]                                       
       540 2005-07-21 16:26 ┣[maeda-yarv atusi.org]                                       
       541 2005-07-21 18:58 ┗[shiro lava.net      ]                                       
       542 2005-07-22 08:36  ┣[shiro lava.net      ]                                     
       544 2005-07-24 01:24  ┗[usa garbagecollect.j]                                     
       545 2005-07-24 04:23   ┗[shiro lava.net      ]                                   
       546 2005-07-24 13:50    ┗[usa garbagecollect.j]                                 
       547 2005-07-24 16:54     ┗[matz ruby-lang.org  ]                               
       548 2005-07-24 18:49      ┗[shiro lava.net      ]