In article <877kz2qh50.wl / studly.priv.netlab.zetabits.co.jp>,
  Shugo Maeda <shugo / ruby-lang.org> writes:

> たぶん、rubyのArray#joinの実装を改善するのが一番まっとうなんじゃ
> ないかと思います(^_^;

というのはすでに(私のことをかわいそうと思ってくれた)まつもとさんが 1.7
でやってくれました。コードをちゃんと読んではいないのですが、同様に観測
すると線形くさい結果が出ています。というわけでいったん Array に貯めて
から join するかぎりは大丈夫になったようです。

で、Array に貯めずに直接伸ばしていくとどうなるか、というとこれはこれま
でどおり非線形になります。

> Rubyレベルで見せるかどうかは別として、JavaのStringBufferのような
> クラスを用意して、それを利用するようにした方がよいのではないでしょ
> うか。

String 自体が StringBuffer のようなものであってもいいんじゃないでしょ
うか。

後ろにどんどんつけ加えていく、というもっともありがちなケースを救うだけ
なら String が(使っている領域ではなく)確保している領域のサイズを覚えて
おけばいいと思うのですが。Array みたいに。

と思っているにもかかわらず、なぜ Array#join のほうを話題に出したかとい
うと Array#join の改善は明らかに可能であるのに対し、String 自体の変更
はどこまで波及するかわからなかったからです。でも明らかに可能だと思って
いるにもかかわらず実際に変更を行なわなかった理由は、多言語化したときに
String の連結がメモリ領域の単なる連結ではなくなるような事態もあるかも
知れない、と思ったからなんです。
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)