From: Tanaka Akira Date: 2008-01-20T09:41:19+09:00 Subject: [ruby-dev:33203] Re: Binary String In article <4792717D.8080408@airemix.com>, "NARUSE, Yui" writes: > えぇ、それは理解してます。しかし、その確認にかかるコストは以下の通りです > し、問題の coderange_scan は文字列リテラルの場合は作った時点で終わってい > ますから、問題ないかと思います。つまり、a) b) b') とも、実装・動作コスト > はほとんど変わらないと思います。 それで済めばとても幸せなんですが、残念なことに文字列は変更さ れていくことがありますので。 文字列が変更されると、特に対処していない限り coderange は unknown になるため、ループの中で文字列を変更していると、毎回 coderange_scan が動く場合があります。 これが文字列がどんどん伸びていくときに起こるととくに凶悪で、 文字列の長さに対して線形では済まない時間がかかります。 1.9.0-0 の前には Array#join で起きて install-doc が私の手元 で 40分かかるということがありましたし、ちょっと前には String#gsub の内部で結果を伸ばしていくときに起きて自作のライ ブラリ (htree) が許容不能な実行速度になりました。 そういうこともありますので、文字列長に比例した時間をかけざる を得ない仕様にするのは、どうしても必要だというのでない限りや めておいたほうが良いと思っています。 まぁ、人間の側面から必要だというのであれば、Ruby の方針から してどうしても必要だということになるのかもしれませんが。 -- [田中 哲][たなか あきら][Tanaka Akira]