जंग के द्वारा संचालित दस्तावेज पर Rust Move Semantics पर दस्तावेज किए गए जंग के चाल अर्थशास्त्र का एक बड़ा उदाहरण है।जंग कैसे स्टैक वैरिएबल को स्थानांतरित करता है जो कॉपी करने योग्य नहीं हैं?
मुझे दोनों मामलों का मूलभूत समझ है। पहला यह है कि कैसे एक आदिम के पास एक नया उपनाम हो सकता है और मूल का उपयोग अभी भी किया जा सकता है क्योंकि अंतिम परिणाम i32
Copy
विशेषता का उपयोग करता है। यह मेरे लिए अच्छी समझ में आता है।
इसके अतिरिक्त, कई अच्छे कारणों से दूसरा उदाहरण कई उपनामों के संदर्भ में समझ में आता है जो ढेर पर i32
का संदर्भ देता है। जंग मालिकाना नियम लागू करती है और इसलिए मूल उपनाम का उपयोग नहीं किया जा सकता है कि एक नया बाध्यकारी बनाया गया है। यह डेटा-रेस, डबल फ्री इत्यादि को रोकने में मदद करता है।
लेकिन ऐसा लगता है कि एक तीसरा मामला है जिसके बारे में बात नहीं की जाती है। रस्ट आवंटित structs की चाल को कैसे कार्यान्वित करता है जो Copy
विशेषता को लागू नहीं करता है? यह निम्न कोड के साथ दर्शाया गया है:
#[derive(Debug)]
struct Employee{
age: i32,
}
fn do_something(m: Employee){
println!("{:?}", m);
}
fn main() {
let x = Employee {
age: 25,
};
do_something(x);
//compiler error below because x has moved
do_something(x);
}
यह मुझे पता है: उपरोक्त मामले में, जंग ढेर पर Employee
आवंटित करेगा। उपर्युक्त संरचना Copy
विशेषता को लागू नहीं करती है और इसलिए किसी नए उपनाम को निर्दिष्ट किए जाने पर कॉपी नहीं की जाएगी। यह मेरे लिए बहुत भ्रमित है क्योंकि यदि Employee
संरचना स्टैक पर आवंटित की जाती है और Copy
विशेषता को लागू नहीं करती है, तो यह कहां/कैसे स्थानांतरित होती है? क्या यह शारीरिक रूप से do_something()
के स्टैक फ्रेम में स्थानांतरित हो जाता है?
इस कन्डर्रम को समझाने में किसी भी मदद की सराहना की जाती है।
क्या आप अपना उदाहरण सरलीकृत करना चाहते हैं? 'कर्मचारी 'संरचना को कम जटिल बनाने और कम से कम जीवनकाल को हटाने के लिए बहुत अच्छा होगा। 'संरचना कर्मचारी {आयु: i32}' उदाहरण के लिए पर्याप्त होगा। –
@ लुकासकल्बर्टोड - हाँ मैंने उदाहरण को सरल बना दिया है। –