- 
                Notifications
    You must be signed in to change notification settings 
- Fork 13.9k
          Make Rc<T>::deref and Arc<T>::deref zero-cost
          #132553
        
          New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
b283c44    to
    ae36f44      
    Compare
  
    
      
        
              This comment has been minimized.
        
        
      
    
  This comment has been minimized.
| Would it potentially enable those types to have an ffi compatible ABI? So that they could be returned and passed directly from /to ffi function, like  | 
      
        
              This comment has been minimized.
        
        
      
    
  This comment has been minimized.
| 
 I think in theory it is possible, at least for sized types, but I am not familiar with how to formally make it so. | 
ae36f44    to
    0d6165f      
    Compare
  
    
      
        
              This comment has been minimized.
        
        
      
    
  This comment has been minimized.
0d6165f    to
    98edd5b      
    Compare
  
    
      
        
              This comment has been minimized.
        
        
      
    
  This comment has been minimized.
| r? libs | 
98edd5b    to
    8beb51d      
    Compare
  
    
      
        
              This comment has been minimized.
        
        
      
    
  This comment has been minimized.
8beb51d    to
    d7879fa      
    Compare
  
    
      
        
              This comment has been minimized.
        
        
      
    
  This comment has been minimized.
d7879fa    to
    317aa0e      
    Compare
  
    | @EFanZh Is this ready for review? If so, please un-draft the PR. | 
| @joboet: The source code part is mostly done, but I haven’t finished updating LLDB and CDB pretty printers. The CI doesn’t seem to run those tests. | 
| No worries! I just didn't want to keep you waiting in case you had forgotten to change the state. | 
f243654    to
    1308bf6      
    Compare
  
    0919931    to
    e35e496      
    Compare
  
    | ☔ The latest upstream changes (presumably #147197) made this pull request unmergeable. Please resolve the merge conflicts. | 
e35e496    to
    9158a93      
    Compare
  
    
      
        
              This comment has been minimized.
        
        
      
    
  This comment has been minimized.
| This may be way too late or useless. But maybe another way to split this up is to factor in a  | 
| ☔ The latest upstream changes (presumably #147340) made this pull request unmergeable. Please resolve the merge conflicts. | 
9158a93    to
    9688823      
    Compare
  
    | This PR was rebased onto a different master commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. | 
| 
 @camsteffen: This is already done by splitting commits. The optimization is done in two standalone commits: 
 | 
| I think what you are doing is: 
 My suggestion is: 
 But again, this may not be worth it. Just a thought. | 
Currently,
Rc<T>andArc<T>store pointers toRcInner<T>andArcInner<T>. This PR changes the pointers so that they point toTdirectly instead.This is based on the assumption that we access the
Tvalue more frequently than accessing reference counts. With this change, accessing the data can be done without offsetting pointers fromRcInner<T>andArcInner<T>to their contained data. This change might also enables some possibly useful future optimizations, such as:&[Rc<T>]into&[&T]within O(1) time.&[Rc<T>]intoVec<&T>utilizingmemcpy.&Option<Rc<T>>intoOption<&T>without branching.Rc<T>andArc<T>FFI compatible types whereT: Sized.