From: Yukihiro Matsumoto Date: 2010-03-31T07:09:15+09:00 Subject: [ruby-dev:40866] Re: revert 1.9 \w limitation to ASCII まつもと ゆきひろです In message "Re: [ruby-dev:40863] Re: revert 1.9 \w limitation to ASCII" on Wed, 31 Mar 2010 02:39:18 +0900, "NARUSE, Yui" writes: |「大きな非互換性になりそうです」というのは何か具体的なフィードバックが |背景にあると思っているのですが、どのようなフィードバックでしょうか。 例によってソースをはっきり覚えていないので恐縮ですが、1.9で \wがマッチしなくなったという苦情を見たことがあります。 Twitterだったかな。 |まず、EUC や SJIS に対してのものだと仮定します。 |また、EUC と SJIS 系のみというのは一貫性に欠けます。 |利便性のためなら一貫性を欠くこともいとわないのが Ruby の姿勢ではありますが、 |日本語系だけというのは正直いかがなものかと思います。 |というわけで、この方向で行くならば、non ASCII non Unicode の場合は、 |に変えた方がいいように感じます。 本人はそのつもりでした。今読み返すとそうは読めませんね。 |次に、Unicode、というか UTF8 に対してのものだと仮定します。ここで、 |> Unicodeにおいては、キャラクタデータベー |> スがあるので、Unicode的にキャラクタなものを対象にするのが良い |> と思います。 |を採用すると、すぐには気づきづらいが実際に問題が出るという、 |厄介な互換性問題を組み入れることになります。 | |というのも、後に他の言語での \w の中身を出していますが、普通はこの |「Unicode的にキャラクタなもの」は記号の類を含みません。 |ちなみに、Bug #3047 は一足早くそれを期待してがっかりしている例です。 |http://redmine.ruby-lang.org/issues/show/3047 | |1.9 で \w を「Unicode的にキャラクタなもの」にするとこの逆、 |具体的には今までマッチしていた一部の文字がマッチしなくなります。 |これは non ASCII が全てマッチしなくなる (けどすぐに気づく) |現在の実装よりたちが悪いのではないでしょうか。 |つまり、互換性が理由ならばこの案は無いと思うのです。 | |まとめると、互換性が理由ならばエンコーディングに限らず、 |(とは言っても non dummy encoding になりますが) |[a-zA-Z_0-9] + non ASCII (= /[a-zA-Z_0-9\P{ASCII}]/) が正解でしょう。 |Ruby の文法的にもこれは識別子に使える名前と一致するので意味が |なきにしもあらずであるようには思います。 確かにここは議論の余地のあるところです。 まず、挙動の候補を (1) a-zA-Z_0-9 (2) a-zA-Z_0-9 + non ASCII (3) Unicode的Caharacter とします。次に、利用者の立場を (a) 1.8スクリプト移植者 (EUC/SJIS) (b) 1.8スクリプト移植者 (UTF-8) (c) EUC/SJIS(要するにUnicode以外)利用者 (d) Unicoder と分けます。これらそれぞれの立場にとって「望ましい」挙動とは (a) → (2) : 互換性が維持されるから (b) → (2) : 互換性が維持されるから (c) → (2) : 互換性が維持されるから (d) → (3) : おそらく本来\wに期待するところだから になるでしょう。(d)以外にとっては、成瀬さんのおっしゃるよう に、Unicodeも含めて a-zA-Z_0-9 + non ASCII にすべきという結 論になりそうですね。 しかし、今後、Rubyの利用者のうちUnicoderの割合は増加し、互換 性を強く期待する人は減少するであろうことを考えると、 non Unicode → (2) Unicode → (3) というのは、さほど悪い選択ではないと思います。一方、現状の a-zA-Z_0-9 に限定することは、全員が「しかたない」と感じるもの の、多くがうれしくないという「平等に不満」というものになって いるのではないでしょうか。 成瀬さんが指摘されるUnicodeにおける互換性問題とは、 * Unicode利用者、かつ * \w が全てのnon ASCIIキャラクタにマッチすることを期待する 人に発生するものですが、これの深刻さはちょっとわかりません。 たいした問題ではなさそうな気もするんだけど。 |なお、互換性とは別に書きやすさの面で \w で単語構成文字っぽいのに |マッチして欲しいという主張ならば別の議論で、以下のような感じになりますか。 |1. \w だけ特別扱いしたい |2. \w だけ Unicode は気持ち悪い |2a. [:word:] 使ってよ |2b. \d と \s も Unicode 志向に戻そうぜ ところで、[:word:]って現状なににマッチしますかね。なんとなく、 a-zA-Z_0-9にしかマッチしないような気がするんですが。[:word:] が上で述べた挙動をするのであれば、私の抵抗はだいぶ少なくなる んですが。 まつもと ゆきひろ /:|)