Feature #22205
Updated by shugo (Shugo Maeda) 2 months ago
I believe ruby2_keywords should be removed in the future, but removing it now would cause compatibility issues. As a first step, how about adding deprecation warnings to ruby2_keywords?
At least the following methods should emit a warning:
* Module#ruby2_keywords
* main.ruby2_keywords
* Proc#ruby2_keywords
The following methods are relatively harmless, so it might be better not to warn on them in the first step:
* Hash.ruby2_keywords_hash?
* Hash.ruby2_keywords_hash
## Background and Motivation
While implementing Proc#refined, I noticed that the ruby2_keywords flag on an iseq (param.flags.ruby2_keywords) can be mutated by Proc#ruby2_keywords even when the iseq is shared among multiple Ractors, which is not Ractor-safe.
I consider ruby2_keywords a negative legacy, and I would rather deprecate it than fix such behavior.
## Schedule
### For Module#ruby2_keywords, main.ruby2_keywords, and Proc#ruby2_keywords
* 4.1: Documentation-only deprecation
* 4.2: Verbose-mode deprecation warning
* 4.3: Non-verbose-mode deprecation warning
* 4.4: Removal
### For Hash.ruby2_keywords_hash?, Hash.ruby2_keywords_hash
* 4.1: Documentation-only deprecation
* 4.2: No warnings, still working as migration tools
* 4.3: Verbose-mode deprecation warning
* 4.4: Non-verbose-mode deprecation warning. Hash.ruby2_keywords_hash? always returns false, and Hash.ruby2_keywords_hash returns a plain duplicate of the given hash
* 4.5: Removal