Issue #7768 has been updated by charliesome (Charlie Somerville).


=begin
Summary of my discussion with mame in #ruby-core:

  [00:33:08] <mame1> r30148
  [00:34:16] <mame1> some people complains to your r39004
  [00:34:43] <mame1> because it might be an intentional change by matz at r30148
  [00:34:53] <mame1> http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?revision=30148&view=revision
  [00:35:09] <mame1> * array.c (rb_ary_dup): should copy contents only.  no instance
  [00:35:09] <mame1>  variable, no class would be copied.
  [00:36:04] <nurse> The point is that don't change behavior without matz's accept
  [00:36:09] <mame1> however, matz is now saying the opposite opinion against himself
  [00:36:38] <charliesome> sorry for changing behaviour
  [00:36:44] <mame1> he now prefers the old 1.9.3 behavior
  [00:36:59] <charliesome> the bug looked like a regression, but i fixed the wrong place
  [00:37:25] <mame1> oops, 1.9.3 behavior -> 1.9.2 behavior
  [00:38:53] <mame1> indeed rb_ary_dup impacts too extensively a little
  [00:39:10] <mame1> then how do you fix?
  [00:39:36] <charliesome> so this was the bug http://bugs.ruby-lang.org/issues/7768
  [00:40:25] <mame1> fix only Array#uniq ?
  [00:40:35] <charliesome> mame1: that would be the least intrusive way
  [00:41:16] <charliesome> mame1: do you want me to do it?
  [00:42:22] <mame1> could you create a patch for the way?
  [00:42:36] <charliesome> sure, one moment
  [00:43:25] <mame1> just confirm: you didn't intend to change the behavior of other methods than Array#uniq, right?
  [00:43:53] <mame1> then, it looks good to me to choose "the least intrusive way"
  [00:44:26] <charliesome> mame1: i thought that perhaps there were other methods that would behave inconsistently in some cases like #uniq
  [00:44:47] <charliesome> but i will give you a patch that undoes it
  [00:45:19] <mame1> honestly i agree with you to some extent
  [00:45:33] <mame1> but the timing is bad a little
  [00:45:39] <charliesome> yes, i agree
  [00:45:41] <charliesome> sorry once again
  [00:46:07] <charliesome> something to discuss after 2.0 is released maybe?
  [00:46:18] <mame1> no prob, thank you for your cooperation
  [00:46:35] <mame1> no plan :-)
  [00:47:12] <mame1> ah, it may be difficult to change 2.0.0 after 2.0.0-p0 is released
  [00:47:38] <charliesome> for next minor, i mean
  [00:47:41] <mame1> 2.0.1 or 2.1.0 will include the change, which matz will decide
  [00:47:49] <mame1> yes
  [00:48:29] <charliesome> mame1: https://gist.github.com/charliesome/adeff49e900f6b8a75fc
  [00:48:55] <charliesome> the test i added in r39004 still passes
  [00:49:11] <charliesome> so i think this is ok if you're happy to change Array#uniq's behaviour
  [00:51:31] <mame1> charliesome: it is really a regression, isn't it?
  [00:52:04] <charliesome> mame1: i think so - see http://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/26987/diff/array.c
  [00:52:19] <charliesome> it looks like an attempt at an optimization
  [00:52:51] <mame1> yeah, i've seen the diff, but i've not checked the other region of code
  [00:53:15] <charliesome> mame1: maybe the safest option is to revert r39004 completely?
  [00:53:38] <mame1> it returns a new object whose class is the same of the argument, say, when its length is >= 2?
  [00:53:45] <charliesome> mame1: yes
  [00:54:22] <mame1> hmm, thanks. let me consider for a minute :-)
  [00:54:28] <charliesome> no problem
  [01:15:14] <mame1> charliesome: sorry for let you wait
  [01:15:25] <mame1> i decided that i'll release rc2 with the *current* behavior
  [01:15:45] <charliesome> mame1: current as in trunk or current 1.9.3?
  [01:16:00] <mame1> because matz again prefered not only Array#uniq but also other Array methods to return the original class rather than Array
  [01:16:04] <mame1> current trunk
  [01:16:35] <mame1> iow your r39004 is accepted :-)
=end
----------------------------------------
Bug #7768: Inherited Array class missing
https://bugs.ruby-lang.org/issues/7768#change-35987

Author: england (Roman Ivanilov)
Status: Closed
Priority: Normal
Assignee: charliesome (Charlie Somerville)
Category: 
Target version: 2.0.0
ruby -v: 1.9


=begin
Hello. I apologize if I missed something.
I found strange behavior in ruby 1.9:

 class Custom < Array; end
 Custom.new(0){|i| i + 1}.uniq.class # => Array
 Custom.new(2){|i| i + 1}.uniq.class # => Custom

while in 1.8 it works just as I expected. 

 class Custom < Array; end
 Custom.new(0){|i| i + 1}.uniq.class # => Custom
 Custom.new(2){|i| i + 1}.uniq.class # => Custom

* it is actual not only for the uniq method.
* tested with ree-1.8.7-2010.02, ruby-1.9.2-p290, ruby-1.9.3-p375, ruby-1.9.3-p125

Any bug here?

=end


-- 
http://bugs.ruby-lang.org/