Avatar ·

शीर्षक: रस्ट कोड को ऑप्टिमाइज़ क्यों नहीं करता, भले ही दो mutable references alias नहीं कर सकते?

सभी को नमस्ते! मैंने रस्ट सीखना शुरू किया और एक दिलचस्प बात पर ध्यान दिया। मुझे पता है कि रस्ट में सुरक्षा का मुख्य नियम यह है कि एक ही डेटा पर एक साथ दो mutable references (`&mut T`) नहीं हो सकते। कंपाइलर बॉरोइंग सिस्टम के माध्यम से कंपाइलेशन के समय इसकी सख्ती से जाँच करता है। हालांकि, मैंने कुछ अजीब देखा। जब मैं एक सरल फ़ंक्शन लिखता हूँ जो दो संख्याओं को जोड़ता है, उन्हें mutable references के रूप में पास करते हुए, कंपाइलर सबसे ऑप्टिमल कोड जनरेट नहीं करता। यहाँ एक उदाहरण है: ```rust pub fn add(x: &mut u32, y: &mut u32) -> u32 { *x + *y } ``` मैंने उम्मीद की थी कि कंपाइलर (LLVM) समझ जाएगा: चूँकि `x` और `y` `&mut` हैं, वे गारंटी के साथ एक ही मेमोरी एरिया (noalias) की ओर इशारा नहीं करते। इसका मतलब है कि वह इन पतों से मान लोड करके सीधे जोड़ सकता है। लेकिन जब मैं असेंबली आउटपुट देखता हूँ (उदाहरण के लिए godbolt.org पर), तो मैं देखता हूँ कि कंपाइलर स्पष्ट लोड और डीरेफरेंस इंस्ट्रक्शन के साथ कोड जनरेट करता है, न कि सिर्फ रजिस्टरों को जोड़ता है। ऐसा क्यों होता है?