Issue #16961 has been reported by k0kubun (Takashi Kokubun).

----------------------------------------
Misc #16961: Is overriding a method in a subclass considered as a breaking change or not?
https://bugs.ruby-lang.org/issues/16961

* Author: k0kubun (Takashi Kokubun)
* Status: Open
* Priority: Normal
----------------------------------------
## Background
* In [Bug #15589], I'm going to make `Integer#zero?` faster (comparable to `== 0`) on JIT by making sure the method is inlinable by MJIT.
  * Currently `Integer#zero?` is not defined and it's implemented as `Numeric#zero?`.
  * However, `Numeric#zero?`'s method definition handles not only `Integer` but also `Rational` and `Complex`. Because `rb_equal` which calls `rb_funcall` is used for `Rational` and `Complex`, we can't predict what'd happen there and it prevents `Numeric#zero?` from being inlined by MJIT. Moreover, reducing inlined code size is always good for JIT-ed code. So specializing `Numeric#zero?` to `Integer#zero?` will be beneficial for MJIT's inlining regardless of `rb_funcall`'s presence.
  * So I'd like to define `Integer#zero?` for optimizing JIT-ed code of `zero?` call against `Integer`.

## Discussion
Theoretically, overriding a method in a subclass in Ruby core might change an existing application's behavior (In the above background, `Numeric#zero?` could be overridden and it would get suddenly ignored for Integer).

How should we decide whether the change is acceptable or not? Some possible ideas:

* Search all gems using gem-codesearch and check if there's any code to be broken.
  * In `Integer#zero?`'s case I found [this code](https://github.com/ninjudd/rupture/blob/v0.3.0/lib/rupture/core_ext.rb#L18-L20) but it's not gonna be broken by overriding `Integer#zero?`. Other `zero?` method definitions seemed for other classes, but I can double check every occurrence if this will be the measure.
* Discuss and make a decision on case-by-case basis.
  * In `Integer#zero?`'s case we'll discuss whether overriding `Integer#zero?` is acceptable or not.




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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>