From: Hidetoshi NAGAI Date: 2008-01-23T19:37:14+09:00 Subject: [ruby-dev:33318] Re: Binary String 永井@知能.九工大です. From: "NARUSE, Yui" Subject: [ruby-dev:33285] Re: Binary String Date: Wed, 23 Jan 2008 03:52:12 +0900 Message-ID: <47963B63.7040108@airemix.com> > > 事実 Marshal のケースでは,何とか対策するために > > ライブラリに手を入れざるを得なかったわけですよね? > > 後述しますが、現段階では手を入れてませんね。 あ,ごめんなさい.ここで Marshal のケースは不適切でした. encoding をインスタンス変数で持たせるように変更した点は, 文脈としては関係ないですね. > 一義的にはライブラリ側を 1.9 対応させるのがベストなわけですが、ライブラ > リ側に手を入れられないことが前提ならば [ruby-dev:33269] のように 途中で > force_encoding したり、オブジェクトを受け取ってから force_encoding すれ > ばいいでしょう。1.8 非対応なのはわかっているのだから、使う側が > force_encoding すればいいよね、と。 いえ,返されてしまった後ではすでに手遅れかもしれないです. 1.8 では $KCODE とかもありましたから,そうした情報に基づいて 内部で何らかの処理を行っているかもしれません. しかしそうした処理を 1.9 で実行したときには 1.9 のメソッドが使われてしまうわけで, 返されてからの force_encoding では間に合いません. ですので,私には > 若干ここの仮定がおかしいように思います。その「手の届かないライブラリ内 > 部」はすべて encoding 非対応なので、encoding が設定されている必要はない > でしょう。encoding が必要になるのは手が届くところまで来てからですから、 > そこで設定してあればよのです。 では十分とは思えないです. 「ではそういうライブラリは諦めてください」が Ruby 1.9 なのかもしれませんが... # これまでは, Ruby って,ある程度のいい加減さを許容する # 鷹揚さがあるように (魅力のひとつとして) 感じてましたが, # 1.9 (の encoding) ではそれを許さない雰囲気がありますね. # まぁ,これは本当に「感情的」なものですが.(^_^) > あとは、ライブラリにブロックを渡すなりしてライブラリ中で処理するか、オブ > ジェクトを受け取ってから設定するかすれば。 え〜っと,それって「ライブラリ側に手を入れる」ってことですよね. 上記の「ライブラリ側に手を入れられないことが前提ならば 」とは 矛盾してしまいませんか.(^_^; > encoding 非対応のライブラリが返してきた時点で必然の結果得られたものでは > ないことが分かります。 ライブラリ上で作られた (生の?) string と, ライブラリからさらに nkf などを通じて処理された結果の string が 同じように混ざって返されてもですか? > 以上の通りなので、この仮定が否定されます。 多分,背景として考えている状況が違っているんだと思います. 成瀬さんは比較的低レベルで活用される基本ライブラリのようなものを イメージされているのかもしれません. そのようなものであれば,結果を受け取ってから force_encoding でも 確かに十分であるケースが多そうです. 私の場合はそうした基本ライブラリを組み合わせて使っているような 高レベルのライブラリを想定していました. そうしたものでは冒頭のように force_encoding が間に合わないケースが しばしば発生するのではないかと考えます. 「なら実際にそういうものを用意してみろ」, 「具体例を出さないからわからない」と言われて きちんと提出できないところがダメなんでしょうけど... # たとえ出せたとしても, # 「1.9 は 1.8 との互換性維持を前提としていないんだから, # そういうケースは諦めましょう」 # と言われて終りにされそうな気がするのは気のせいでしょうか... > ただ、本当に必要かというと、今のところ必要に見える場面はどれも別のよりい > い解決策が存在しているようです。なので、実は必要ないのではないかと。 これまで維持するように注意を払ってきた互換性を 主義に反して捨てる覚悟をした者に対して, それさえも「よりいい解決策」とさらっと流してしまうのは ちょいと残酷ではないかと.(^_^) 1.8 との継続性に対する重みの捉え方が根本的に違ってて, 空回りしてしまってるのかなぁ... -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp