成瀬です。

Tanaka Akira wrote:
> In article <471003CB.7060701 / airemix.com>,
>   "NARUSE, Yui" <naruse / airemix.com> writes:
> 
>> 現在の Ruby の実装についてならば、 image がバイナリとすれば、という仮定
>> は image を UTF-8 なり Shift_JIS なりにすればエミュレートできますよね、
>> 動きます。
>> 文字列とバイト列を別物とした世界ならば動かないとは思いますが、「ASCII と
>> BINARY の分離」は「文字列とバイナリの分離」とは別物ではないでしょうか。
> 
> えぇと、混乱したのですが、おそらく私が後者について述べている
> と考えられたのですね? そう想定して書きますが私は文字列とバイ
> ナリを異なるクラスにすることは考えていません。
> 
> 私が述べているのはエンコーディングとして ASCII-8BIT とは別に
> BINARY を導入したとして、image が String のインスタンスで
> image.encoding が "BINARY" を返す状況下で、/\AGIF/ =~ image
> が動かないだろうという話です。
> 
> image.encoding が "UTF-8" であるときに動くのは UTF-8 が
> ASCII 互換だからです。私は BINARY は ASCII 互換でないと想定
> しているので動かないことになります。

なーるほど、たしかにそうなりますね。

> なお、ASCII 互換というのは内部的には rb_enc_asciicompat で検
> 査されます。いまその実装を眺めたところ... うぅむ、
> rb_enc_mbminlen(enc)==1 という実装はなんか UTF-16 しか想定し
> てなくて、EBCDIC は考えてなさそうですねぇ。まぁ、BINARY の導
> 入に伴って実装は変更され、BINARY についても偽を返すようにな
> ると想定してください。

理解しました。

>> 田中さんの主張は、ASCII はバイナリの部分集合であるというものだと思うので
>> すが、Ruby M17N において ASCII は全ての String 加算・マッチング系の部分
>> 集合となっています。田中さんが ASCII とバイナリについて展開した論理は、
>> ASCII と UTF-8 でも、ASCII と Shift_JIS とでも展開できるのではないでしょ
>> うか。図にすると以下のような感じですよね。
> 
> ASCII 互換でないものについては異なります。
> 
> ASCII 互換なバイナリというのはまさに ASCII-8BIT で、成瀬さん
> が想定しているものはそれだと思います。私が考えているのは
> ASCII-8BIT とは異なる純粋なバイナリというものの利点・欠点で
> す。

なるほど、今「ASCII-8BIT」と呼ばれているものは、今まで「US-ASCII」の名前
に引きずられて、0x00-0x7F がメインで 8bit 部分はおまけという認識だったの
ですが、むしろ ASCII 互換バイナリと解釈するべきなのですね。

そうすると、「US-ASCII」との解釈で実装されたと思われる部分、[ruby-dev:
31715] の「7bit ASCII のみからなる文字列は US-ASCII」という機能は、今と
なっては若干違和感があるのですがどうなのでしょう。

-- 
NARUSE, Yui  <naruse / airemix.com>
DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA