From: masayoshi takahashi Date: 2008-09-17T03:12:49+09:00 Subject: [ruby-dev:36337] Re: [patch] performance improvement patch for benchmark/bm_so_count_words.rb 高橋征義です。 2008/09/15 13:51 NARUSE, Yui : > [ruby-core:18532] に同趣旨のものを含むパッチがありますね。 > どの程度かぶってるかまではまだ見ていませんがとりいそぎ。 おお、なんかかぶってますね。 最近のメール[ruby-core:18616]の、case.patとcasecmp.patなんかは 同趣旨のものと思われます。 2008/09/15 16:06 Tanaka Akira : >> 1.9では、asciiだけのファイルを読み込む場合でも、読み込んだ >> 文字列のencodingはデフォルトでUTF-8になるようなので、現状の >> single_byte_optimizable() では真になりません(ので困った)。また、 >> rb_enc_str_asciionly_p() のみでは、ASCII-8BITでは真にならない >> ような気がするので、両方の条件を混ぜたようなものが >> 必要になるのではないかと。 > > rb_enc_str_asciionly_p は文字列をスキャンする可能性がありま > す。 > > もし、目的の処理自体よりも判別に時間がかかるのなら、それは適 > 切ではないでしょう。 やっぱりそうですよねえ。判別に時間をかけてでも処理全体が早い 場合もあるのですが、時間をかけずにすめばそれに越したことは ないわけで。 で、成瀬さんご指摘の[ruby-core:18532]によれば、rb_str_modify()で CODERANGEをクリアしているのが問題で、それがなければ再度 判別する必要がないのでは、ということでした。確かに計ってみると それっぽいです。 * この認識はあってますか? * rb_str_modify()の、 ENC_CODERANGE_BROKENじゃなければ クリアしない版をstr_modify()という名前で作る、がいいですか? (個人的にはrb_str_modify()との違いが分かりにくいというか、そもそも  rb_str_modify()を変えてしまっていいのではないかという気も  するんですが、やっぱりクリアする版も必要なんでしょうか?) 高橋征義 (takahashimm@gmail.com)