Feature #20429
Updated by byroot (Jean Boussier) 7 months ago
MRI has a number of core methods with special handling in the interpreter and both JITs that if they are redefined negatively impact Ruby performance. The methods currently are (I may be missing a few): - `Integer`: `#+`, `#-`, `#*`, `#/`, `#%`, `#<`, `#>`, `#<=`, `#>=` - `Float`: `#+`, `#-`, `#*`, `#/`, `#<`, `#>`, `#<=`, `#>=` - `String`: `#freeze`, `#size`, `#length`, `#empty?`, `#+`, `#succ`, `#%`, `#-@` - `Array`: `#size`, `#length`, `#empty?`, `#hash` - `Hash`: `Array`: `#size`, `#length`, `#empty?`, `#[]`, `#[]=` Noticing that a dependency do redefine one of these methods can be non-trivial, so I'd like to emit a `:performance` warning when it happens. I can't really think of much reasons to redefine these aside from fun hacks, so I believe discouraging it would be valuable. Patch: https://github.com/ruby/ruby/pull/10532