Rust दो म्यूटेबल रेफरेंसेस के एलियासिंग न होने की धारणा पर कोड को ऑप्टिमाइज़ क्यों नहीं करता?
सभी को नमस्कार! मैं Rust सीख रहा हूँ और यह समझने की कोशिश कर रहा हूँ कि कंपाइलर कोड को ऑप्टिमाइज़ करने के लिए सुरक्षा गारंटियों का उपयोग कैसे करता है। यह ज्ञात है कि Rust में म्यूटेबल रेफरेंसेस (`&mut T`) अद्वितीय होती हैं: किसी भी समय डेटा पर केवल एक म्यूटेबल रेफरेंस मौजूद हो सकती है। यह नियम बॉरो चेकर चरण में कंपाइलर द्वारा गारंटीकृत होता है। ऐसा लगता है कि इससे LLVM को C/C++ में `restrict` के समान ऑप्टिमाइज़ेशन के लिए शक्तिशाली संकेत मिलने चाहिए। हालांकि, मैंने देखा है कि कुछ सरल बेंचमार्क में Rust ऐसा कोड जनरेट करता है जो इस धारणा का उपयोग नहीं करता।
यहाँ एक सरल उदाहरण है:
```rust
pub fn add_assign(x: &mut u32, y: &mut u32) {
*x += *y;
*x += *y;
}
```
मैंने उम्मीद की थी कि कंपाइलर इसे `*x += *y * 2` में ऑप्टिमाइज़ करेगा, क्योंकि `x` और `y` एक ही मेमोरी को इंगित नहीं कर सकते। लेकिन जनरेटेड असेंबली में (उदाहरण के लिए, Compiler Explorer पर) मैं दो रीड और दो एडिशन देखता हूँ। Rust इस तरह के ऑप्टिमाइज़ेशन के लिए एलियासिंग न होने की गारंटी का उपयोग क्यों नहीं करता? क्या यह एक मुख्य लाभ नहीं है?