[#2810] [BUG] IO#eof? when Thread using — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

31 messages 1998/06/08
[#2826] Re: [BUG] IO#eof? when Thread using — matz@... (Yukihiro Matsumoto) 1998/06/10

まつもと ゆきひろです

[#2827] Re: [BUG] IO#eof? when Thread using — keiju@... (石塚圭樹 ) 1998/06/10

けいじゅ@日本ラショナルソフトウェアです.

[#2828] Re: [BUG] IO#eof? when Thread using — matz@... (Yukihiro Matsumoto) 1998/06/10

まつもと ゆきひろです

[#2829] Re: [BUG] IO#eof? when Thread using — keiju@... (石塚圭樹 ) 1998/06/10

けいじゅ@日本ラショナルソフトウェアです.

[#2831] Re: [BUG] IO#eof? when Thread using — matz@... (Yukihiro Matsumoto) 1998/06/10

まつもと ゆきひろです

[#2841] Re: [BUG] IO#eof? when Thread using — keiju@... (石塚圭樹 ) 1998/06/10

けいじゅ@日本ラショナルソフトウェアです.

[#2842] Re: [BUG] IO#eof? when Thread using — matz@... (Yukihiro Matsumoto) 1998/06/10

まつもと ゆきひろです

[#2843] Re: [BUG] IO#eof? when Thread using — keiju@... (石塚圭樹 ) 1998/06/10

けいじゅ@日本ラショナルソフトウェアです.

[#2845] Re: [BUG] IO#eof? when Thread using — matz@... (Yukihiro Matsumoto) 1998/06/11

まつもと ゆきひろです

[#2846] Re: [BUG] IO#eof? when Thread using — keiju@... (石塚圭樹 ) 1998/06/11

けいじゅ@日本ラショナルソフトウェアです.

[#2847] Re: [BUG] IO#eof? when Thread using — matz@... (Yukihiro Matsumoto) 1998/06/11

まつもと ゆきひろです

[#2848] Re: [BUG] IO#eof? when Thread using — keiju@... (石塚圭樹 ) 1998/06/11

けいじゅ@日本ラショナルソフトウェアです.

[#2849] Re: [BUG] IO#eof? when Thread using — matz@... (Yukihiro Matsumoto) 1998/06/11

まつもと ゆきひろです

[#2854] experimental release 1.1b9_25 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

23 messages 1998/06/11
[#2870] Re: experimental release 1.1b9_25 — Takahiro Maebashi <maebashi@...> 1998/06/15

前橋です。

[#2911] experimental release 1.1b9_26 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

33 messages 1998/06/18
[#2912] Re: experimental release 1.1b9_26 — WATANABE Hirofumi <watanabe@...> 1998/06/18

わたなべです.

[#2913] Re: experimental release 1.1b9_26 — matz@... (Yukihiro Matsumoto) 1998/06/18

まつもと ゆきひろです

[#2916] Re: experimental release 1.1b9_26 — Takahiro Maebashi <maebashi@...> 1998/06/18

前橋です。

[#2917] Re: experimental release 1.1b9_26 — matz@... (Yukihiro Matsumoto) 1998/06/18

まつもと ゆきひろです

[#2940] experimental release 1.1b9_27 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

21 messages 1998/06/19

[#2965] feature freeze for 1.1c — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

25 messages 1998/06/22

[#3056] experimental release 1.1b9_28 — matz@... (Yukihiro Matsumoto)

subject says all.

28 messages 1998/06/26
[#3104] Re: experimental release 1.1b9_28 — Takahiro Maebashi <maebashi@...> 1998/06/30

前橋です。

[#3086] Re: Enumerable#reverse ([ruby-list:8579]) — gotoken@... (GOTO Kentaro)

ごとけんです

19 messages 1998/06/29
[#3120] Re: Enumerable#reverse ([ruby-list:8579]) — keiju@... (Keiju ISHITSUKA) 1998/06/30

けいじゅ@日本ラショナルソフトウェアです.

[#3130] Re: Enumerable#reverse ([ruby-list:8579]) — gotoken@... (GOTO Kentaro) 1998/06/30

ごとけんです

[#3146] [REQ] trace_func — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

15 messages 1998/06/30
[#3190] Re: [REQ] trace_func — matz@... (Yukihiro Matsumoto) 1998/07/02

まつもと ゆきひろです

[#3807] Re: [REQ] trace_func — keiju@... (石塚圭樹 ) 1998/12/14

けいじゅ@日本ラショナルソフトウェアです.

[ruby-dev:2889] Re: [BUG] IO#eof? when Thread using

From: keiju@... (石塚圭樹 )
Date: 1998-06-17 03:15:52 UTC
List: ruby-dev #2889
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev :2888 ] the message: "[ruby-dev:2888] Re: [BUG] IO#eof? 
when Thread using ", on Jun/16 18:59(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>|   If an error occurs, or the end-of-file is reached, the return
>|       value is a short item count (or zero).
>|
>|となっていますので, lenより身近いときは, errorかEOFですので, その時は,
>|
>|       fread does not distinguish between end-of-file and  error,
>|       and  callers  must  use feof(3) and ferror(3) to determine
>|       which occurred.
>|
>|をやって下されば, まさに望んでいるものになりそうです.
>
>えーと,これはfreadが0を返した時にエラーであるか,EOFである
>か判別する方法について述べているのであって,lenより短い長さ
>を読み込んだ時の話ではないです.直接はそうは読めないかも知れ
>ませんが.

うーん. 読めないですね(^^;;;

それはともかく.

>|   If an error occurs, or the end-of-file is reached, the return
>|       value is a short item count (or zero).

errorかEOFなら, sizeが短いかzeroを返すとなっていますね. でも, 逆はいっ
ていませんね. つまり, sizeが短いかzeroならerrorかEOFであるか? 

確かめてみました. IO.sysreadはread(2)と全く来たいどうり動作します.
IO.readは, 私の思っている通り動作しました. つまり,

  IO.read(n)は, 必ずnのサイズだけ読み込む. 例外はEOF(とたぶんエラーの
  時)だけ.

でした. 

検証方法は, socketを開いて, あるサイズXだけ書き込んで, あるサイズYだけ
読み込むというものです. XやYの大きさを色々変えて確かめました.

さらに, 片方のソケットに途中まで書き込んでclose下時の動作を調べました.
IO.readは思った通りの動作をして, 途中まで読み込んだだけでした. で,

  IO.eof?

を調べるとちゃんとtrueになっていました.

というわけで, ソースを読んでたしかめたわけではないですが, 普通の状況で
は期待通りの動作をしていると思います.


>|1.
>|  getc/readchar
>|  gets/readline
>|
>|の対象性からあった方が良い.
>
>ま,EOFで例外を発生するreadの存在は否定しません.あるいは現
>在のreadでEOFに対してnilでなくエラーを返すとか.
>
>が,石塚さんの求めている「新read」は途中までしか読み込んでい
>ない場合にもエラーを発生することを求めているわけで,それとは
>また違う概念です.ここは明確に区別すべきだと思います.

ですね.

>|2. read(n)の時に毎回サイズをチェックしなければ, 正しいプログラムになら
>|   ないのはめんどくさいことが多い.
>|
>|   *私なら*ですが, readよりも新readを絶対使いますね.
>
>おっしゃることはわかります.そういうメソッドがあれば便利な局
>面がある事も肯定します.が,freadのlen引数はもともとは読み込
>むべきバッファの大きさを指定しているので,そのような挙動を
>freadに対応させるのはかなり大胆ですよね.

これは, 先ほどの実験からそのような挙動をするといっていいんじゃないでしょ
うか?

>で,もともとUNIXにあるモデルを大きく変更したものを標準にした
>くないので,現在のような挙動のreadがなくなることはないと思い
>ます.readという名前のメソッドの挙動が石塚さんの望むようなも
>のになることも.

はい. このことは, 納得しました.

>|3. 問題点

>|readlineと新readって若干動作が違うんですね. readlineは読み込中にEOFが
>|来るとそれまで読んでいたものを返しますが, 新readはそのサイズに満たなけ
>|れば, 例外ですので...
>|
>|でも, 両方の使い方からいって, 総方ともそうなっている方が良いとは思いま
>|すが...
>
>えーと,getlineは長さを指定しないので「サイズに満たない」と
>いう状況は発生しません.EOFに対して例外を発生することと,指
>定した長さが確実に読まれたことを保証するのは別のことです.

ええ. 私もそれがいいたかったんです. 昔は, String.chopしかなかったので, 
誤動作する危険性はありましたが(^^;;;

>ですから,考えるべきことは
>
> (a) readはEOFで例外を発生させるべきか(仕様変更)

これは, サイズ0だったら例外って意味ですよね. その前の段階で, readした
時のサイズが短いはず(正常じゃなければ)ですので, ちゃんとエラーチェック
したければ, 例外が発生した段階では遅いとおもいます.

それよりも, gets/getcと仕様があっていた方が良いんじゃないかしら?

> (b) もし,現在の仕様のままの場合,EOF例外を発生するread相当
>     のメソッドは必要か.

上記と同じ理由より, あまり有効ではないと思います.

> (c) bがyesの場合のメソッド名
>
> (d) 指定したサイズが読めなかった場合例外を発生するread相当
>     のメソッドは(組込みメソッドとして)必要か

必要か? って聞かれると困りますが, 確かに便利ですし. ほとんどの場合期待
通りの動作を行なうことが分かっているので, 利用価値はあると思います.

> (e) dがyesの場合のメソッド名

うーん. この間と同じですが

  readn
  readl
  readchars
  readstring
  readsize
  
> (f) dがyesの場合,そのメソッドはEOFに対してnilを返すか,例
>     外を起こすか(あるいは両方のメソッドを用意するか)

えーと. 2つありますよね.

1. readして0なら, nil or EOFError
2. read(n)して, nより小さくかつeofなら, EOFError

getlineとかと仕様を合わせれば良いんじゃないでしょうか?

__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread