From: "drbrain (Eric Hodel)" Date: 2012-10-27T10:18:31+09:00 Subject: [ruby-core:48418] [ruby-trunk - Feature #7220] Separate IO#dup, StringIO#initialize_copy from dup(2) Issue #7220 has been updated by drbrain (Eric Hodel). Tracker changed from Bug to Feature Subject changed from StringIO#initialize_copy causes aliasing between the objects to Separate IO#dup, StringIO#initialize_copy from dup(2) Target version set to Next Major This is intentional behavior which has existed since 1998. It is not a bug. When I am working with IOs I expect the ruby methods to follow POSIX conventions more than ruby conventions. This method is not the only one in the standard library that doesn't follow ruby conventions. If you wish to change this behavior you must demonstrate the change will be harmless easy for existing libraries to adapt to. I don't believe this is the case (due to the drastic change in behavior this would introduce), or that such a change is worthwhile after nearly 15 years. ---------------------------------------- Feature #7220: Separate IO#dup, StringIO#initialize_copy from dup(2) https://bugs.ruby-lang.org/issues/7220#change-31740 Author: brixen (Brian Ford) Status: Open Priority: Normal Assignee: Category: Target version: Next Major Calling StringIO#initialize_copy causes the two objects to share the position, and eof status. Is this a bug? sasha:rubinius brian$ irb 1.9.3p286 :001 > require 'stringio' => true 1.9.3p286 :002 > a = StringIO.new "abcdefuq" => # 1.9.3p286 :003 > b = StringIO.new => # 1.9.3p286 :004 > b.send :initialize_copy, a => # 1.9.3p286 :005 > a.pos => 0 1.9.3p286 :006 > b.pos => 0 1.9.3p286 :007 > b.getc => "a" 1.9.3p286 :008 > a.pos => 1 1.9.3p286 :009 > a.getc => "b" 1.9.3p286 :010 > b.pos => 2 1.9.3p286 :011 > b.read => "cdefuq" 1.9.3p286 :012 > a.eof? => true Thanks, Brian -- http://bugs.ruby-lang.org/