Project

General

Profile

Actions

Feature #22205

open

Deprecate ruby2_keywords

Feature #22205: Deprecate ruby2_keywords
2

Added by shugo (Shugo Maeda) 4 days ago. Updated about 8 hours ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:126134]

Description

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

Related issues 1 (0 open1 closed)

Related to Ruby - Feature #14183: "Real" keyword argumentClosedActions
Actions

Also available in: PDF Atom