[#22195] IO::for_io and TCPServer#bind — GOTOU Yuuzou <gotoyuzo@...>

test_drb が IPv4 射影アドレスが有効な環境でないと動かないこ

16 messages 2003/12/09
[#22198] Re: IO::for_io and TCPServer#bind — matz@... (Yukihiro Matsumoto) 2003/12/09

まつもと ゆきひろです

[#22205] yet another inconsistency about EOF between StringIO and IO — Tanaka Akira <akr@...17n.org>

StringIO の

24 messages 2003/12/10
[#22206] Re: yet another inconsistency about EOF between StringIO and IO — nobu.nakada@... 2003/12/10

なかだです。

[#22214] Re: yet another inconsistency about EOF between StringIO and IO — Tanaka Akira <akr@...17n.org> 2003/12/10

In article <200312100725.hBA7P8Ac011112@sharui.nakada.kanuma.tochigi.jp>,

[#22222] Re: yet another inconsistency about EOF between StringIO and IO — nobu.nakada@... 2003/12/10

なかだです。

[#22234] Re: yet another inconsistency about EOF between StringIO and IO — Masahiro Sakai (酒井政裕) <sakai@...> 2003/12/11

さかいといいます。

[#22262] Re: yet another inconsistency about EOF between StringIO and IO — Tanaka Akira <akr@...17n.org> 2003/12/13

In article <20031211.214041.71090239.sakai@tom.sfc.keio.ac.jp>,

[#22328] Re: yet another inconsistency about EOF between StringIO and IO — Tanaka Akira <akr@...17n.org> 2003/12/23

In article <87k751dzyf.fsf@serein.a02.aist.go.jp>,

[#22331] Re: yet another inconsistency about EOF between StringIO and IO — matz@... (Yukihiro Matsumoto) 2003/12/23

まつもと ゆきひろです

[#22334] Re: yet another inconsistency about EOF between StringIO and IO — Tanaka Akira <akr@...17n.org> 2003/12/23

In article <1072167374.096702.13473.nullmailer@picachu.netlab.jp>,

[#22343] Re: yet another inconsistency about EOF between StringIO and IO — matz@... (Yukihiro Matsumoto) 2003/12/23

まつもと ゆきひろです

[#22330] core dump with ungetc — Tanaka Akira <akr@...17n.org>

次のように ungetc を使うと core を吐く場合があります。

14 messages 2003/12/23
[#22332] Re: core dump with ungetc — nobu.nakada@... 2003/12/23

なかだです。

[#22366] `to_s': method `to_s' overridden (TypeError) — Tanaka Akira <akr@...17n.org>

そういえば、次の `to_s': method `to_s' overridden (TypeError) というの

12 messages 2003/12/24

[#22385] Tk.callback_break causes seg-fault or hang-up — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

19 messages 2003/12/24
[#22387] Re: Tk.callback_break causes seg-fault or hang-up — matz@... (Yukihiro Matsumoto) 2003/12/24

まつもと ゆきひろです

[#22393] Re: Tk.callback_break causes seg-fault or hang-up — Hidetoshi NAGAI <nagai@...> 2003/12/24

永井@知能.九工大です.

[#22395] Re: Tk.callback_break causes seg-fault or hang-up — matz@... (Yukihiro Matsumoto) 2003/12/24

まつもと ゆきひろです

[#22396] Re: Tk.callback_break causes seg-fault or hang-up — matz@... (Yukihiro Matsumoto) 2003/12/24

まつもと ゆきひろです

[#22397] Re: Tk.callback_break causes seg-fault or hang-up — Hidetoshi NAGAI <nagai@...> 2003/12/24

永井@知能.九工大です.

[#22418] ruby-1.8.1 build failed on HP-UX 11.11 — MIYAMUKO Katsuyuki <k-miyamuko@...>

みやむこです。

29 messages 2003/12/25
[#22419] Re: ruby-1.8.1 build failed on HP-UX 11.11 — matz@... (Yukihiro Matsumoto) 2003/12/25

まつもと ゆきひろです

[#22420] Re: ruby-1.8.1 build failed on HP-UX 11.11 — matz@... (Yukihiro Matsumoto) 2003/12/25

まつもと ゆきひろです

[#22424] Re: ruby-1.8.1 build failed on HP-UX 11.11 — MIYAMUKO Katsuyuki <k-miyamuko@...> 2003/12/25

みやむこです。

[#22491] Re: ruby-1.8.1 build failed on HP-UX 11.11 — MIYAMUKO Katsuyuki <k-miyamuko@...> 2004/01/05

みやむこです。

[ruby-dev:22334] Re: yet another inconsistency about EOF between StringIO and IO

From: Tanaka Akira <akr@...17n.org>
Date: 2003-12-23 09:04:58 UTC
List: ruby-dev #22334
In article <1072167374.096702.13473.nullmailer@picachu.netlab.jp>,
  matz@ruby-lang.org (Yukihiro Matsumoto) writes:

> うーん、「EOF flag 依存の挙動を無くすか減らす」というのがあ
> まりイメージできません。なにか意見がありますか。

まず、なにはともあれ read(nil) を EOF flag (feof の返り値) にかかわら
ず常に String を返すようにするのがいいと思います。

これは EOF flag の影響としてもっとも目立つところだからです。

EOF flag の影響はこれ以外には

* read(0)
* EOF flag がセットされた後にファイルが延びた場合や、端末からの入力で
  複数回 ^D を送った場合
  
があります。

前者は EOF flag の観察以外には役に立たず、誰も使わないので、変えるにし
ても最後が良いと思います。

後者は微妙で、変えるなら EOF flag がセットされるたびに clearerr するわ
けですが、特に端末に対する挙動の変化が適切かどうかは微妙な所です。した
がって、少なくとも 1.8.1 でやるのは妥当ではないでしょう。

さて、そうやって EOF flag 依存の挙動が減ると、IO モドキが実装しやすく
なるという利点があります。IO モドキというのは StringIO,
Zlib::GzipReader など、IO と同じような型を持つクラスです。

今回の EOF flag の話で判明したわけですが、IO モドキの実装が行われる場
合にはほぼ確実に EOF flag の実装は失敗します。StringIO も
Zlib::GzipReader も問題があり、さらに、IO 自身についても疑わしい所があ
ります。これは要するに IO モドキを実装しようとする人にとって仕様が理解
しにくいことを意味します。

ただ、一般に Ruby の方針として、実装を苦労してもユーザの利便性を優先す
るということがあり、仕様が(例え理解不能なほど)複雑であってもそのこと自
身は悪くないという考えもあるわけですが、EOF flag の件に関しては次の
2つの理由により、実装を簡単にするように仕様を変えたほうが適切だと思い
ます。

* EOF flag がなくてもユーザの利便性は落ちない

  以前の議論を読みましたが、(原さんの)要求は空のファイルを read(nil)
  したときに nil が返って来るのが困るというもので、この要求に応える方
  法としては EOF flag を使わなくても常に String を返すという方法があり
  ます。というか、原さんは議論の終りごろにはむしろそっちを主張していま
  した。それに対して、EOF flag を使う仕様のほうが良いという明確な理由
  は無いように思えます。唯一それらしい主張と思えるのは read(nil) は
  read(∞) だという話ですが、read(∞) だとしたら空のファイルに対して
  "" は返さないわけでそれも理由にはならないように思います。

* EOF flag が消えると IO モドキを実装する人にとって利便性は上がる

  もし IO の仕様が Ruby 本体の IO だけで実装されるのなら複雑な仕様でも
  大きな問題はありません。問題が出るたびに頭をひねって解決すればそれで
  すみます。

  しかし、IO の仕様は IO だけでなく、StringIO, Zlib::GzipReader など、
  さまざまなところで実装されます。複雑な仕様は正しい実装を難しくし、
  IO との一貫性のとれていない実装を生まれやすくします。その結果として
  オブジェクト指向の利点である多態性を損なうことになります。

  なお、StringIO, Zlib 以外のものが実際にあるかというと、例えば、坂井
  さんはなんか考えているようです
  http://web.sfc.keio.ac.jp/~s01397ms/d/?date=20031209#p02

というようなわけで、とりあえず read(nil) は常に String を返すようにす
ると良いんではないかと思うわけです。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread