Actions
Feature #13893
openAdd Fiber#[] and Fiber#[]= and restore Thread#[] and Thread#[]= to their original behavior
Status:
Open
Assignee:
-
Target version:
-
Description
Ruby 3 API cleanup suggestion.
The Thread and Fiber classes have a very odd API for setting/getting thread local and fiber local variables. With Ruby 3 coming soon, this is a perfect opportunity to make this API more coherent and return to the Principal of Least Surprise. The concept of Fibers and Threads should be completely separated and we should no longer assume that a Fiber is attached to any particular Thread.
I suggest this:
class Fiber
# Gets a fiber-local variable.
def [](index)
...
end
# Sets a fiber-local variable.
def []=(index, value)
...
end
# Returns true if the given +key+ exists as a fiber-local variable.
def key?(key)
...
end
# Returns an array of fiber-local variable names as symbols.
def keys
...
end
end
class Thread
# Gets a thread-local variable.
def [](index)
...
end
# Sets a thread-local variable.
def []=(index, value)
...
end
# Returns true if the given +key+ exists as a thread-local variable.
def key?(key)
...
end
# Returns an array of thread-local variable names as symbols.
def keys
...
end
end
Also, remove Thread#thread_variable?
, Thread#thread_variable_get
, Thread#variable_set
, and Thread#thread_variables
since that behavior is already covered by Thread#key?
, Thread#keys
, Thread#[]
, and Thread#[]=
. The APIs for both Thread and Fiber are more coherent and less surprising with these changes.
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0