From: Lazaridis Ilias Date: 2011-07-05T22:46:25+09:00 Subject: [ruby-core:37797] [Ruby 1.9 - Bug #4893] Literal Instantiation breaks Object Model Issue #4893 has been updated by Lazaridis Ilias. Yukihiro Matsumoto wrote: > |DEFINITION: > | > |What do you mean with "global status"? > > That something you implemented by the C global variable in this case. * I do not use a "C global variable", but a class-object variable. * There is no "global status", but a class-object status. > |Would it be still a "global status", if the flag would be set automatically and internally, without user intervention? > > Depends on the automatic set strategy, which you haven't told me. I've described the outline. But it would be nice if you would tell me a strategy, which would make you accept that it's not a "global status". Possibly this way I can understand your interpretation "global status". > |INFLUENCE: > | > |Why is it not acceptable? > > The global status tends to make program behavior unpredictable, > especially under threading environment. I understand that, but this is not the case here: VARIABLE: * I don't use *any* global variable (but an internal class-object scope variable) * I use the same (string-)class-object scope flags that are used *excessively* within the existent ruby source-codes. STATUS: * The status is class-object-bound (exactly as the status "redefined initialize method exists" is) * The test-all passes (with an activated redefined String#initialize) At this point, if you still have objections, I ask you friendly to demonstrate them with test-code. This issue is far to deep to be handled with words. [And may I remind you that this issue is still on status "rejected". This is not the way issues are processed: if they exist, they are open/assigned/feedback, until rejected/closed.] ---------------------------------------- Bug #4893: Literal Instantiation breaks Object Model http://redmine.ruby-lang.org/issues/4893 Author: Lazaridis Ilias Status: Rejected Priority: Normal Assignee: Yukihiro Matsumoto Category: Target version: ruby -v: 1.9.2 #String2.rb class String def initialize(val) self.replace(val) puts object_id end def my_method_test 'has method ' end end # command line $ irb irb(main):001:0> original = String.new("original") => "original" irb(main):002:0> load "String2.rb" => true irb(main):003:0> altered = String.new("altered") 21878604 => "altered" irb(main):004:0> altered.my_method_test => "has method " irb(main):005:0> literal = "literal" => "literal" irb(main):006:0> literal.my_method_test => "has method " irb(main):007:0> - The initialize method is an integral part of the class String. From the moment that "String2.rb" is loaded, the initialize method of class String has been validly redefined. (The behaviour of the String class within the "irb session" is altered) The altered initialize method is now an integral part of the class String. The altered String object behaves as expected (responds to "my_method_test, initialized via redefined initialize method). The String(Literal) object responds to "my_method_test", but it is was not initialized with the redefined initialize method. - The "Literal Instantiation" calls the original (core-C-level) String initialize method instead of the redefined one (user-language-level). This *breaks* the object model. -- http://redmine.ruby-lang.org