From: Shugo Maeda Date: 2000-10-07T04:21:37+09:00 Subject: [ruby-dev:11142] Re: copy-on-write for substr --Multipart_Sat_Oct__7_04:21:30_2000-1 Content-Type: text/plain; charset=ISO-2022-JP 前田です。 At Fri, 6 Oct 2000 17:42:42 +0900, Yukihiro Matsumoto wrote: > |Cで書かれたルーチンで文字列の最後に'\0'を期待するものが結構ありま > |すね。 > |STR2CSTRで処理すればある程度は救えそうですが、RSTRING(str)->ptrと > |かはどうしたものか…。 > > grepするとRSTRING(str)->ptrを直接参照している部分は300箇所を > 越えますね。そのうち最後に'\0'を期待するものはどのくらいかな > あ。ううむ。 気合で標準/添付ライブラリについては対応しました。 拡張ライブラリのすべてが対応されるのはちょっと時間がかかるかもし れませんが、問題が見つかったとしてもSTR2CSTRに書き変えるだけなの でそれほどの手間ではないように思います。 とりあえず、パッチを添付しますのでご検討ください。 substrで生成される文字列は、たいていの場合、ほとんど変更されるこ とがないようなので、かなり効果があると思います。 -- 前田 修吾 --Multipart_Sat_Oct__7_04:21:30_2000-1 Content-Type: application/octet-stream; type=gzip Content-Disposition: attachment; filename="ruby-substr.diff.gz" Content-Transfer-Encoding: base64 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 RGNzF8jzF8QnUaTMmAAA --Multipart_Sat_Oct__7_04:21:30_2000-1--