Actions
Feature #19377
closedRename Fiber#storage to Fiber.storage
Feature #19377:
Rename Fiber#storage to Fiber.storage
Status:
Rejected
Assignee:
-
Target version:
-
Description
Justification:
-
#storage
, which pretends to be an instance method, is always available only onFiber.current
, which is problematic to document, and needs special handling whenstorage
is called for non-current Fiber; - with class method + docs "storage of the current fiber" it all will be self-evident;
- Most of the time, when we declare methods that are available only in the current {something}, they are class methods. (like storage's itself interface of
Fiber::[]
andFiber::[]=
, orModule.used_modules
, which is modules and refinements of the current context, but it is notself.used_modules
, for example) - Code like
Fiber.current.storage = {foo: 'bar'}
Fiber[:foo]
...looks like it is two unrelated things (storage of the current fiber vs some "global" key getter/setter?)
I don't see much discussion of this in #19078. Matz in #19078#note-22, while accepting the interface, describes it as homogenous:
(1) fiber[key]/fiber[key]=val - accepted.
(2) fiber.storage => hash - accepted
(3) fiber.storage=hash - should be experimental
...
So I believe it should be either Fiber.current[]
and Fiber.current.storage
, or Fiber[]
, and Fiber.storage
. The latter is preferable to underline it is only one, related to the current fiber, interface, not "every fiber instance has one (but actually you can use only current
's)
Actions