Project

General

Profile

Feature #18256

Updated by Eregon (Benoit Daloze) about 3 years ago

Currently these 4 classes are defined as both constants of `Object` and of `Thread`. 

 On CRuby 3.0.2, their `#inspect` shows they were first defined under `Thread` and then aliased in Object: 
 ``` 
 $ ruby -ve 'p [Mutex, Queue, SizedQueue, ConditionVariable]' 
 ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux] 
 [Thread::Mutex, Thread::Queue, Thread::SizedQueue, Thread::ConditionVariable] 
 ``` 

 FWIW this contrasts to TruffleRuby which has: 
 ``` 
 $ ruby -ve 'p [Mutex, Queue, SizedQueue, ConditionVariable]' 
 truffleruby 22.0.0-dev-589c944e, like ruby 2.7.4, GraalVM CE Native [x86_64-linux] 
 [Mutex, Queue, SizedQueue, ConditionVariable] 
 ``` 
 (because these classes are all core now and I thought the Thread:: prefix was the alias since they moved to core) 

 However I believe most usages out there do *not* use the `Thread::` prefix, or in other words almost nobody uses the `Thread::` prefix for those classes. 
 And it seems very clearly confirmed by `gem-codesearch`: 

 ``` 
 $ gem-codesearch 'Thread::Mutex' | wc -l 
 254 
 $ gem-codesearch '\bMutex\b' | wc -l 
 19378 
 ``` 
 About 75x more common to use `Mutex` than `Thread::Mutex` it seems. 

 ``` 
 $ gem-codesearch 'Thread::Queue' | wc -l 
 138 
 $ gem-codesearch '\bQueue\b' | wc -l 
 38174 
 ``` 
 About 276x more common to use `Queue` than `Thread::Queue` it seems. 

 ``` 
 $ gem-codesearch 'Thread::ConditionVariable' | wc -l 
 110 
 $ gem-codesearch '\bConditionVariable\b' | wc -l 
 2145 
 ``` 
 About 19.5x more common to use `ConditionVariable` than `Thread::ConditionVariable` it seems. 

 ``` 
 $ gem-codesearch 'Thread::SizedQueue' | wc -l 
 27 
 $ gem-codesearch '\bSizedQueue\b' | wc -l 
 633 
 ``` 
 About 23x more common to use `SizedQueue` than `Thread::SizedQueue` it seems. 

 So I propose to update the canonical names of these classes to be without the `Thread::` prefix, to represent the vast majority of usages, and also the fact these classes are core now and not stdlib. 
 In other words, for 3.1.0 I propose: 
 ``` 
 $ ruby -ve 'p [Mutex, Queue, SizedQueue, ConditionVariable]' 
 ruby 3.1.0 ... 
 [Mutex, Queue, SizedQueue, ConditionVariable] 
 ```

Back