こんにちは、なかむら(う)です。

In message "[ruby-dev:31987] Re: multibyte string/regex literal with escape sequence"
    on Oct.09,2007 17:47:06, <matz / ruby-lang.org> wrote:
| それを「バイナリ」と呼ぶぶんには構いませんが、それが「わか
| る」、「区別できる」ことにどんな嬉しさがありますか。

「わかる」ことはそれ自体嬉しいことだと思うのですが、それじゃ
弱いということですかね。
一つは[ruby-list:31994]でまつもとさんがおっしゃっておられる点
があります。

また、「US-ASCII」という、いかにも7bitなデータ列です、という
雰囲気の名前に惑わされずに済む、という嬉しさがあるような気が
します。
あと、US-ASCIIならまだいいのかもしれないのですが、例えば明ら
かにEUC-JPではない文字列リテラルがEUC-JPになる、とかいうのは
かなり嫌な気がします。
# 念のために言うと、今はこうです。


で、encoding上区別があるとしたら、という前提で、この(1)〜(3)
の話が出てくるわけですが、この(1)や(2)というのは、rubyが自動
的にある文字列をバイナリとみなすとしたらどうやって判断するか、
という案になります。

(1)はリテラルの話ですから、スクリプトを書いてる人が意図的に文
字列中にエスケープシーケンスで8bitなデータを挿入していること
が明確なわけで、であればこれをバイナリとみなすのは自然な解釈
と考えられるのではないかと思います。

(2)は、リテラルにとどまらずrubyが自動的に判断するとしたら、そ
こで判断するんじゃないかという話。

(3)の方は、そんな自動的な解釈よりは、より明確にスクリプト上で
バイナリリテラルであることを表明した方がいいという方向ですね。
まあ、"...".force_encoding(バイナリ) でもいいんですけど、長い
し。


| これはありえると思ってました。が、もうちょっとユースケースが
| たまってから考えようと思ってました。どういうケースで「バイナ
| リ」文字列が嬉しいのかよくわからないんですよね。確かにpackと
| かで生成される文字列はバイナリですが、CRubyではいずれにしても
| 内部表現に変換が行われないので、バイナリを特別扱いしなければ
| ならない局面はそれほど多くないと予想しています。

rubyインタプリタの内部機構にバイナリを特別扱いしてもらおうと
いう話はほとんどないだろうと思います。
バイナリを特別扱いしたいのは、スクリプト上でencodingを元に処
理を変えたい場合じゃないでしょうかね。


それでは。
-- 
U.Nakamura <usa / garbagecollect.jp>