From: Sora Harakami Date: 2010-08-18T08:32:06+09:00 Subject: [ruby-dev:42055] Re: [Feature #3675] String#prepend, String#>> 普通に現在の実装ではだめなのですか. 2010/8/12 Kenta Murata : > むらたです。 > > 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/ > > > -- @sora_h - http://codnote.net/