成瀬です。 同じ前提から正反対の結論が出る例として、 Tanaka Akira wrote: > たとえば G というものを考えると、LATIN CAPITAL LETTER G とい > う文字を表現したいのか 0x47 というバイトを表現したいのか常に > 意識する必要があります。 LATIN CAPITAL LETTER G は文字列の要素、0x47 はバイト列の要素ですが、Ruby ではどちらも String の要素であるというのは重要な前提だと思います。 > たとえば「GIF ファイルの先頭 3バイトは GIF である」とか、 > 「ISO-2022-JP において JIS X 0208 1983 を使うときには > ESC $ B を使う」とか、ASCII に依存した表現はよく行われます。 ASCII 列は、文字列的にもバイト列的にも用いられるということですよね。 > ASCII とバイナリを完全に分離するということは、このような表現 > をプログラム上で行うときにはその表現が ASCII を前提としたも > のであることを陽に記述しなければならないことを意味します。 バイナリを ASCII から分離しなくとも、Ruby の \x00-\x7F は原則 ASCII とい う前提が既に存在するわけで、陽に記述しなくとも「それ」が ASCII であるこ とは Ruby のプログラムである時点で暗に記述されていると考えます。 > たとえば、/\AGIF/ =~ image とかは動かないわけです。 > image がバイナリとすれば、内部に LATIN CAPITAL LETTER G とい > う文字は存在し得ないわけですから。 現在の Ruby の実装についてならば、 image がバイナリとすれば、という仮定 は image を UTF-8 なり Shift_JIS なりにすればエミュレートできますよね、 動きます。 文字列とバイト列を別物とした世界ならば動かないとは思いますが、「ASCII と BINARY の分離」は「文字列とバイナリの分離」とは別物ではないでしょうか。 田中さんの主張は、ASCII はバイナリの部分集合であるというものだと思うので すが、Ruby M17N において ASCII は全ての String 加算・マッチング系の部分 集合となっています。田中さんが ASCII とバイナリについて展開した論理は、 ASCII と UTF-8 でも、ASCII と Shift_JIS とでも展開できるのではないでしょ うか。図にすると以下のような感じですよね。 ┌────┐ │BINARY │ ┌───┼────┼───┐ │UTF-8 │ASCII │EUC-JP│ └───┴────┴───┘ -- NARUSE, Yui <naruse / airemix.com> DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA