藤本です、こんにちは。

#メール量が多すぎてスレッドの流れについて行けてないのですが (^^;

From: 青山 和光 <PXN11625 / niftyserve.or.jp>
Subject: [ruby-list:6862] Re: http_get.rb
Date: Mon, 2 Mar 1998 07:17:36 +0900

> 実は、binmode を意識していたので、IO でいきました。$/ = "\r", $\ = "\r\n"
> という感じで Mac にも対応できて便利かな。と。(しかし、awk に似せる為の
> ものだったとは。これでは変更してはまずいですね。)
> 
> Mac 版では \r や \n の扱いはどのようになる予定でしょうか?>藤本さん

  Mac版では普通は (binmode以外では)

    \n   0x0D、つまりMacOSでのテキスト改行文字
    \r   0x0A、つまりUNIXでのテキスト改行文字

として扱われています(みたいです)。これはMac版で使ってるライブラリ
(GUSI+MSL)がそのように振る舞うからで、あえてMac版rubyをそうしたという
わけではありません。おそらくCのソース互換性のためそう振る舞うのだと思
います。それに応じてデフォルトの$/は"\n"のままにしてます。

  僕にとって、"\n"という文字から醸し出されるイメージは「0x0Aというコー
ド、UNIXではテキスト改行文字」なので、ちょっと気持悪いところもあります
が、「システムに依存しないテキスト改行文字」を表すと考えれば、\nをテキ
スト改行文字として扱っているスクリプトを書き直す必要がないという利点は
あるかと思います。

#だけど、これだと"\r\n"が0x0A0Dになってしまいますね、うーん (^^;

  \nや\rのような表現が、具体的なコードを表すのか、それともある意味を持
つ文字を抽象的に表しているのか、その点を明確にしないと何とも言えないと
ころもあります。後者だとすると"\r\n"と言う表現に0x0D0Aというバイト列を
期待することに問題があることになるし、前者だとすると今のMac版のままだ
とまずいですね。

  僕の感想としては、javaを例に出すと、java.lang.system.getProperties()
で得られるシステムプロパティのfile.separator、path.separator、
line.separatorに相当するようなものがrubyにあって、テキスト改行文字、
TCP/IPで使われる改行文字などを表すときにはそれを使うようにするのがいい
なぁと思います。

> また、binmode はあるのでしょうか?

  binmodeって f = File.open("filename", "rb")のbのことですよね。
                                          ^
そうだとしてeval.rbで試してみると (openするファイルはマックのテキスト
になってます)

ruby> f = File.open("::src:ruby-1.1:README")
#<File:0x298ab68>
ruby> f.gets
"* What's Ruby\n"
ruby> f.close
nil
ruby> f = File.open("::src:ruby-1.1:README", "rb")
#<File:0x298a834>
ruby> f.gets
"* What's Ruby\r\rRuby is the interpreted scripting language for quick and\r..."
とこんな感じです。

#Mac版はなかなかちゃんとしたものになりそうになくて、まだかなり中途半
#端な状態なんですが、それでよければBeOS版ともども早め(できれば今週中
#くらい)にテスト公開したいと思ってます。

=============================================================
 藤本尚邦  FUJIMOTO Hisakuni                hisa / imasy.or.jp
=============================================================