From: Kouhei Sutou Date: 2008-01-23T22:46:03+09:00 Subject: [ruby-dev:33326] Re: Binary String 須藤です。 In <47973B38.6030604@airemix.com> "[ruby-dev:33323] Re: Binary String" on Wed, 23 Jan 2008 22:03:45 +0900, "NARUSE, Yui" wrote: > つまり、Ruby 1.9 はデフォルトで encoding をつけるので Perl より思い切っ > たというかなんというか。 > > > # Perlでは軒並み動かなくなったのだったらRubyの場合もそうなる > > # のかなぁと。 > > 事情を知らずに use utf8; (リテラルに utf8 フラグ ≒ encoding をつける) を > やった日には泥沼にはまった物ですが、Ruby 1.9 はデフォルトでそれが付いて > いる状態ですね。 そのPerlのuse utf8;相当のものが1.9のmagic commentというものに あたると思っていたのですが、違うのでしょうか?で、magic commentがついていないものはASCII-8BITになると思っていました。 そしてASCII-8BITがバイト列として(バイト列っぽく?)扱われる のかなぁと思っていたので、1.9でも > 端的にいえば、Perl の文字列とは utf8 フラグのついたバイト列のことだった > わけですが、デフォルトではつかなかったので、最初から最後までバイト列で通 > してしまうということができました。 ということになって、既存のプログラムもそれっぽく動くのかなぁ と思いました。(ASCII-8BITがバイト列として扱われるというのが 間違い?) > >> そもそも 1.8 でも文字絡みの部分はちょくちょく変更入ってますからねぇ。nkf > >> が 1.7 から 2.0 になったりとか。 > > > > これは1.8.x間で互換性が失われている、つまり、既存のプログラム > > が動かなくなるかもしれないということでしょうか? > > Ruby変更履歴が参考になりますかね。 > http://www.ruby-lang.org/ja/man/html/Ruby_CAD1B9B9CDFACEF2.html nkf関連の変更は以下のようですが、これの影響で1.8.x間で互換性 が失われているのでしょうか? ruby 1.8.2 feature: 2004-11-20 ext/nkf/nkf-utf8/ [lib] [new] utf8 対応 nkf (nkf 2.x) の追加。 2004-12-04 NKF.guess [lib] [compat] NKF.guess は NKF.guess2 の alias になりました。 従来のものを使いたい場合は NKF.guess1 を使って下さい。 > バージョンアップの度に微妙な非互換が発生していたため、ビジネスでの利用が > 広まりつつあった 1.8 系からまつもとさんを隔離しようというのが 1.9 のリ > リースを急いだ理由の一つだという噂がまことしやかに。 気になったのはnkfの1.7->2.0が非互換性を生んでいるのかというこ とでした。もう少し言えば > >> そもそも 1.8 でも文字絡みの部分はちょくちょく変更入ってますからねぇ。nkf > >> が 1.7 から 2.0 になったりとか。 が何を言いたいのかがわからなかったということでもあります。私 には「もう1.8.x間で非互換性があって動かないプログラムがあるん だから、1.8/1.9間でも動かなくていいじゃん?」みたいに読めて しまったので、「そんなことないよね?」と確認したかったんです。 せっかくなので、ついでにStringについても見てみたのですが、互 換性が失われそうな記述は見つけられませんでした。1.8.x間では なく1.8<->1.9の話でしょうか? # これは関係ないですが、 1.9でのStringの非互換性はString#[Integer]がIntegerではなく Stringを返すことが一番大きいと思っているのですが(eachとかも ありますけど)、そのときは if string[0] == ?a とか書いていると思うので、あまり変なことをしていない1.8で動い ていたやつが1.9でもそれっぽく動くのでないかと思っています。 例えば、テキスト処理をしているHikiDocというやつは何もしなく てもそれっぽく動いている気がします。 (tDiaryは変なことをしているやつだと思う。)