From: Kenta Murata Date: 2010-08-12T09:24:29+09:00 Subject: [ruby-dev:42008] Re: [Feature #3675] String#prepend, String#>> むらたです。 On 2010/08/10, at 22:23, Yukihiro Matsumoto wrote: > 非常に興味深いです。ただ、いくつか気になる点があります。 > > (1) 実装上のことですが、appendと異なり、prependは、文字列領域 > を拡張した上で、現在の文字列の内容をコピーし、それから引 > 数の内容を先頭からコピーすることになります。つまり、 > > a = "foo" + a > > と比較して、コストはオブジェクトアロケーションひとつしか > 変わりません。それが本当にうれしいかやや疑問です。もっと > も長い目で見るとGCへの負荷が軽いというメリットが出るケー > スもあるでしょう。 a >> b を内部的に (i) a.length を維持したまま a << b する (ii) b のポインタを a と共有し、 b.length = a.length + b.length と更新する。 こうすると a = "foo" + a と同程度の計算量で、 a >> b の記法を実現できると思いました。 -- Kenta Murata OpenPGP FP = 1D69 ADDE 081C 9CC2 2E54 98C1 CEFE 8AFB 6081 B062 本を書きました!! 『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22 E-mail: mrkn@mrkn.jp twitter: http://twitter.com/mrkn/ blog: http://d.hatena.ne.jp/mrkn/