[#7300] resolver を呼ばない UDPsocket#recvfrom — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...>

あんまり ruby-dev な話でも無いのですが、ちょっとした機能拡張の提案なので、

12 messages 1999/07/12
[#7321] Re: resolver を呼ばない UDPsocket#recvfrom — Toshihiko SHIMOKAWA / 下川俊彦 <toshi@...> 1999/07/15

From: Toshihiko SHIMOKAWA / 下川俊彦 <toshi@csce.kyushu-u.ac.jp>

[#7313] Ruby 1.3.5 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.5 is out, check out:

59 messages 1999/07/15
[#7318] Re: Ruby 1.3.5 — WATANABE Hirofumi <watanabe@...> 1999/07/15

わたなべです.

[#7326] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/15

青山です。

[#7331] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/16

まつもと ゆきひろです

[#7340] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/16

青山です。

[#7368] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/19

まつもと ゆきひろです

[#7373] Re: Ruby 1.3.5 — Shin-ichiro Hara <sinara@...> 1999/07/19

原です。

[#7374] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/19

まつもと ゆきひろです

[#7382] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/19

青山です。

[#7386] Re: Ruby 1.3.5 — matz@... (Yukihiro Matsumoto) 1999/07/21

まつもと ゆきひろです

[#7388] Re: Ruby 1.3.5 — Wakou Aoyama <wakou@...> 1999/07/21

青山です。

[#7387] [PATCH]extconf.rb, tcltklib.c, and rubytest.rb for NetBSD — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp>

早坂@会津大学です。

10 messages 1999/07/21

[#7466] [PATCH] for djgpp — WATANABE Hirofumi <watanabe@...>

わたなべです.

21 messages 1999/07/29
[#7467] Re: [PATCH] for djgpp — Katsuyuki Komatsu <komatsu@...> 1999/07/29

小松です。

[ruby-dev:7405] Re: Ruby 1.3.5

From: Wakou Aoyama <wakou@...>
Date: 1999-07-23 02:57:28 UTC
List: ruby-dev #7405
青山です。

Fri, Jul 23, 1999 at 10:14:06AM +0900 において
WATANABE Tetsuya さん曰く:

> 話の前提として、この辺に気が付いていなかったの
> ですね。読んでいて「あれ?」って思っていました。

そうだったんですよ。お恥ずかしい。というか、Ruby の方がメインなので、C
の方はほとんど見ていないんですよね。

> どういうものが、使いやすいでしょうか?
> 
> STDIO を使っている範囲内で、現実的なものという
> のは? (あまり細かく考えていないのですが) C で 
> fread(3) を使うイメージを持っている人は楽です
> が、そういう前提がない人でも引っかかりにくいも
> のがいいですね(って、具体的に書けないのですが)。

結局、まつもとさんが最初に採用されていた、EOF で nil というのが使いや
すくて良さそうに思えます。while s = io.read(n); end という使い方もでき
ますしね。

今回の話のはじまりは、0 バイトのファイルの最初の 0 バイトの読み込み、
すなわち、0 バイトのファイルに対する read(0) でした。

つまり、fread(3) は EOF とは無関係ですから、EOF の判定は別に行う必要が
あり、この判定を feof(3) で行っていれば単純だったのですが、自前で行っ
ていた事により、0 バイトの読み込みは無条件に EOF となっていた事が発端
です。

read(0) が nil という挙動ならば、read() の後の read() もやはり nil で
はないか、いや、read() の後の read() は "" で、read(0) を "" にすべき
だ。と。そんな展開です。

話がややこしくなってしまったのは、正に fread(3) の挙動に気が付かなかっ
た為なのですが、その事が判明した現在では、話の中心は、IO#read によって
fread(3) に拡張を行っている、EOF で nil の扱い、すなわち、Ruby における
EOF とはどうあるべきかという事になっています。

また長くなってしまいましたが、「read は EOF で nil を返す」という Ruby
の fread(3) の拡張については扱いやすくて良いと思われますので、現在のメ
インはその「EOF は Ruby ではどうあるべきか」という事だと思います。

feof(3) をそのままか、それとも、現在のように次の1バイトが読み込めない
場合とするか、ですね。


-- 
青山 和光 Wakou Aoyama <wakou@fsinet.or.jp>

In This Thread