From: Hidetoshi NAGAI Date: 2008-01-20T06:58:41+09:00 Subject: [ruby-dev:33202] Re: Binary String 永井@知能.九工大です. From: Yukihiro Matsumoto Subject: [ruby-dev:33193] Re: Binary String Date: Sun, 20 Jan 2008 02:28:17 +0900 Message-ID: > |Ruby 1.8 からの Marshal 経由 String のことまで考えると, > |UNDEFINED-8BIT (dummy encoding をこれに割り振るのも可?) と > |Encoding.default_undefined とを新設した上で, > |Ruby 1.9 では Marshal のフォーマットバージョンを > |上げてしまうというのが一番すっきりしそうな気がします. > > 「一番すっきり」という基準がよくわからないのですが、私の主観 > ではわからないものは全部「ASCII-8BIT」というのが一番すっきり > しています。 わからないものとわかる or わかるとしていいものとの両方に ASCII-8BIT が付くことがあるように見受けられるので... 「何でこれが ASCII-8BIT になっちゃうの!」というケースが 一切無くなるのであれば,ASCII-8BIT でもいいんですが. > が、それでは困るケースも、もしかしたらあるでしょうから、その > ような場合には、loadの引数として、(1.8から来たような)エンコー > ディング指定がない文字列に付与するエンコーディングの指定を許 > すということは考えてもよいと思っています。 文字列の encoding に関する情報を何らかの値で 文字列と別に保持している場合は面倒なのではないでしょうか? load では指定できないので,読み込んだ後で force_encoding せねばなりませんよね. 1.8 のケースと 1.9 のケースとで分けねばなりませんし. ...などと思ってましたが,「Object 一つだけのこと」と考えれば それも大したことではないですね.(^_^; ただ,ちょっと気になるのが次の点です. > Marshal(1.9)ではエンコーディングは"encoding"というインスタン > ス変数として保存されるので、1.8でも問題なく読めます。ので、 > この点からはフォーマットバージョンを上げなければならない必然 > 性はありません。 これは "@encoding" ですよね? その方針は確定してしまったのでしょうか? だとしたら,ちょっと困るのではないかと思います. 実際に,Ruby/Tk 1.8 での Tk::BinaryString 他 は "@encoding" というインスタンス変数に情報を保持してますので. Ruby/Tk の件はともかく,勝手にインスタンス変数にして付与するのは トラブルの元になるような気がします. こういうことがあるので「フォーマットバージョンを上げた方が」と 言っていました. > なんだかえらく複雑ですが、default_undefinedをプログラム中から > 変更できるならそれは一種の大域変数なので面倒な「状態」を導入 > することになります。スレッドセーフじゃなくなるし。それはあま 実装の問題はよく分かっていないのですが.そうなんですか? > りお勧めではありません。逆に変更できないなら、今度はいろいろ > なところからの入力されたエンコーディングが指定されていない文 > 字列をプログラム全体で一括に扱う必要があり、それはそれで柔軟 > 性に欠けるように思います。 「いろいろなところからの入力」については default_external で 少なくとも明示されるものと考えていましたが. > で、Marshalの件は忘れて、元のTkの話に戻ると、私自身は > Identityというエンコーディング(おそらくはdummy)を導入すること > に価値がある局面はありえると思っています。名前はともかく。し > かし、それはTkからなんらかの理由でエンコーディングがIdentity > である文字列をRuby側に導入しなければいけないケースがあり、か > つ、そのエンコーディングがASCII-8BITでは明らかにまずく、それ > ではないIdentityというエンコーディングでなければならないと示 > された場合に限ります。 > > 現時点では、バイナリとASCII-8BITが区別できなくてまずいケース > については、(いくつかの例外を除いて)明確に指定されていないよ > うに思います。あ、もちろん「バイナリに「ASCII」という名前がつ > いているのが気に入らない」という理由もあるのですが、そこはそ > れ、歴史的事情なので目をつぶっていただくとして。 はい.とりあえずは「困る」という具体例が出るまで保留します. -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp