[#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:22225] Re: yet another inconsistency about EOF between StringIO and IO

From: Tanaka Akira <akr@...17n.org>
Date: 2003-12-10 12:33:34 UTC
List: ruby-dev #22225
In article <8765gp9fob.fsf@serein.a02.aist.go.jp>,
  Tanaka Akira <akr@m17n.org> writes:

> あとこれも

結局、網羅的に StringIO と IO を比較してしまい、次のを見つけました。

% echo -n > zz
% ruby -e 'f = open("zz")
p f.read
open("zz", "w") {|g| g << "a" }
p f.read
'
""
nil

% ruby -rstringio -e 'buf = ""
f = StringIO.new(buf)
p f.read
buf << "a"
p f.read
'
""
"a"

まぁ、横から内容をいじるのはさすがに反則な気もします。

あと、思ったのですが、EOF flag に依存した挙動を仕様とするのは IOモドキ
を作る時にすごく間違いやすいため、結局、仕様を EOF flag に依存しないよ
うに変えるほうが適切なのかもしれません。つまり、read(nil) を常に
String を返すようにするわけですが。

比較スクリプト:
require 'stringio'
require 'tempfile'

def make_io(content, pos, eof)
  io = Tempfile.new("xxx")
  io.seek pos
  io.read if eof
  open(io.path, "w") {|f| f << content }
  if content != File.read(io.path)
    p [:io_content, content, pos, eof, io.string]
  end
  if pos != io.pos
    p [:io_pos, content, pos, eof, io.pos]
  end
  if eof != !io.read(0)
    p [:io_eof, content, pos, eof, io.read(0)]
  end
  io
end

def make_stringio(content, pos, eof)
  buf = ""
  io = StringIO.new(buf)
  io.seek pos
  io.read if eof
  buf << content
  if content != io.string
    p [:stringio_content, content, pos, eof, io.string]
  end
  if pos != io.pos
    p [:stringio_pos, content, pos, eof, io.pos]
  end
  if eof != !io.read(0)
    p [:stringio_eof, content, pos, eof, io.read(0)]
  end
  io
end

def make_stringio(content, pos, eof)
  if pos <= content.length && !eof
    io = StringIO.new(content.dup)
    io.read(pos)
  elsif pos == content.length && eof
    io = StringIO.new(content.dup)
    io.read(pos+1)
  else
    buf = ""
    io = StringIO.new(buf)
    io.seek pos
    io.read if eof
    buf << content
  end
  if content != io.string
    p [:stringio_content, content, pos, eof, io.string]
  end
  if pos != io.pos
    p [:stringio_pos, content, pos, eof, io.pos]
  end
  if eof != !io.read(0)
    p [:stringio_eof, content, pos, eof, io.read(0)]
  end
  io
end

(0..3).each {|len|
  content = "a" * len
  (0..(len+1)).each {|pos|
    [false, true].each {|eof|
      {
        :read_all => lambda {|io| io.read },
        :read0 => lambda {|io| io.read(0) },
        :read1 => lambda {|io| io.read(1) },
        :read10 => lambda {|io| io.read(10) },
      }.each {|name, fun|
        f = make_io(content, pos, eof)
        s = make_stringio(content, pos, eof)
        rf = fun.call(f)
        rs = fun.call(s)
        p [name, content, pos, eof, rf, rs] unless rf == rs
      }
    }
  }
}
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread