Project

General

Profile

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 

Back