From: eregontp@... Date: 2017-09-12T16:20:59+00:00 Subject: [ruby-core:82764] [Ruby trunk Feature#13893] Add Fiber#[] and Fiber#[]= and restore Thread#[] and Thread#[]= to their original behavior Issue #13893 has been updated by Eregon (Benoit Daloze). I agree this would be much nicer and consistent. I can't evaluate the impact on compatibility, but it's likely quite big. ---------------------------------------- Feature #13893: Add Fiber#[] and Fiber#[]= and restore Thread#[] and Thread#[]= to their original behavior https://bugs.ruby-lang.org/issues/13893#change-66619 * Author: cremes (Chuck Remes) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- 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. -- https://bugs.ruby-lang.org/ Unsubscribe: