जंग अपने स्वामित्व नियमों को लागू करने के लिए एक उधार चेकर का उपयोग करता है और यह सुनिश्चित करता है कि प्रोग्राम मेमोरी सुरक्षित हैं। स्वामित्व नियम तय करते हैं कि रस्ट कैसे स्टैक और हीप पर मेमोरी का प्रबंधन करता है।
जब आप जंग प्रोग्राम लिखते हैं, तो आपको संबंधित मूल्य के स्वामित्व को बदले बिना चर का उपयोग करने की आवश्यकता होगी। लचीलेपन और कोड के पुन: उपयोग को प्रोत्साहित करने के लिए जंग एक मजबूत उधार तंत्र प्रदान करता है।
जंग में उधार क्या है?
उधार बिना किसी चर के मूल्य तक पहुंच रहा है चर का स्वामित्व लेना स्वामी का हवाला देकर। उधार चेकर यह सुनिश्चित करता है कि संदर्भ मान्य है, और डेटा को लाइफटाइम नामक निर्माण का उपयोग करके नहीं छोड़ा जाता है।
एक जीवनकाल कितना समय है जब एक चर मौजूद है। जीवन काल परिवर्तनशील सृजन पर शुरू होता है और परिवर्तनशील विनाश पर समाप्त होता है। आप एक चर के स्वामित्व को उधार ले सकते हैं, और जब उधार लिया गया संदर्भ दायरे से बाहर हो जाता है, तो स्वामित्व मालिक चर पर वापस आ जाता है। उधार लेना कुछ इस तरह है पॉइंटर्स आपको C++ और Go. जैसी भाषाओं में मिलेंगे. लेकिन रस्ट कंपाइलर यह सुनिश्चित करने के लिए उधार चेकर का उपयोग करता है कि प्रोग्राम मेमोरी सुरक्षित हैं।
Rust. में उधार लेने का एक उदाहरण
आप एम्परसेंड (&) प्रतीक का उपयोग करके स्वामी को संदर्भित करके एक चर के स्वामित्व को उधार ले सकते हैं।
एफएनमुख्य() {
होने देना एक्स = डोरी:: से ("हैलो"); // x "हैलो" का मालिक है
होने देना वाई = और एक्स; // y संदर्भ x, उधार "हैलो"
प्रिंट्लन!("{}", एक्स);
प्रिंट्लन!("{}", वाई)
}
संदर्भित करके उधार लिए बिना, कार्यक्रम घबरा जाएगा। यह स्वामित्व नियम का उल्लंघन करेगा कि एक मूल्य में एक मालिक हो सकता है, और दो चर एक ही स्मृति स्थान को इंगित नहीं कर सकते हैं। कार्यों में उधार लेना बहुत उपयोगी हो सकता है। स्थानीय चर को तर्क के रूप में लेने वाले अन्य कार्यों को कॉल करते समय स्वामित्व रखने के लिए, एक फ़ंक्शन में उधार लेने का एक उदाहरण यहां दिया गया है।
एफएनप्रिंट_सम(वेक्टर: औरवी.ई.सी<i32>) {
के लिये मूल्यों में वेक्टर {
यदि मान% 2 == 0 {
प्रिंट्लन!("{}", मान);
}
}
}
प्रिंट_सम फ़ंक्शन 32-बिट पूर्णांकों के एक वेक्टर को इसके तर्क के रूप में संदर्भित करता है। इसके बाद यह फॉर-लूप और प्रिंटलाइन का उपयोग करके वेक्टर में मानों की पंक्तियों को प्रिंट करता है जो वेक्टर में दो के गुणक होते हैं! मैक्रो।
एफएनमुख्य() {
होने देना संख्या_वेक्टर = वीईसी![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
प्रिंट_ईवन (और नंबर_वेक्टर); // स्वामित्व उधार लिया गया है, स्थानांतरित नहीं किया गया है
प्रिंट्लन!("मुख्य कार्य संख्या वेक्टर का स्वामित्व बरकरार रखता है{:?}", number_vector)
}
मुख्य कार्य number_vector चर घोषित करता है और इसे 32-बिट पूर्णांक का एक वेक्टर प्रदान करता है। यह तब print_even फ़ंक्शन को कॉल करता है और इसे एक संदर्भ देता है संख्या_वेक्टर एम्परसेंड प्रतीक का उपयोग कर चर।
मुख्य कार्य के स्वामित्व को बरकरार रखता है संख्या_वेक्टर चर यह अपने स्मृति स्थान पर मान का उपयोग करना जारी रख सकता है।
उधार और उत्परिवर्तन संदर्भ
स्वामित्व वापस करने से पहले, फ़ंक्शंस उनके लिए परिवर्तनीय संदर्भों का उपयोग करके उधार चर को संशोधित भी कर सकते हैं।
हालांकि, नियमित चर के विपरीत, जिसे म्यूट कीवर्ड का उपयोग करके म्यूटेबल पर सेट किया जा सकता है, आपको एम्परसेंड प्रतीक के साथ परस्पर संदर्भों को उपसर्ग करना होगा।
परिवर्तनीय संदर्भ बनाने से पहले, जिस चर को आप संशोधित करना चाहते हैं वह परिवर्तनशील होना चाहिए।
एफएननिकालें_मान(वेक्टर: औरमुठवी.ई.सी<i32>) -> &वी.ई.सी<i32> {
वेक्टर.निकालें (4);
वापसी वेक्टर
}
निकालें_मान फ़ंक्शन 32-बिट पूर्णांकों के एक परिवर्तनशील वेक्टर के संदर्भ में लेता है। यह चौथे इंडेक्स में वेक्टर के मान को हटाने के बाद 32-बिट पूर्णांक का वेक्टर देता है।
एफएनमुख्य() {
होने देनामुठ अंक = वीईसी![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
remove_value(&मुठ अंक); // यहाँ परिवर्तनीय संदर्भ
प्रिंट्लन!("{:?}", अंक);
}
फ़ंक्शन संशोधित करता है अंक वेक्टर को remove_value को कॉल करके और एक वेक्टर के परिवर्तनीय संदर्भ को तर्क के रूप में पास करके। वेक्टर को प्रिंट करने पर, वेक्टर का पिछला चौथा इंडेक्स मौजूद नहीं होता है।
ध्यान दें कि तर्क एक परिवर्तनीय वेक्टर का संदर्भ है।
स्वामित्व और उधार को समझना महत्वपूर्ण है
आपको कुशल, मेमोरी-सुरक्षित रस्ट कोड लिखने के लिए स्वामित्व और उधार को समझने की आवश्यकता होगी जो संकलित और चलता है। यदि आपका कोड स्वामित्व नियमों का पालन नहीं करता है, तो उधार लेने वाला चेकर इसका पता लगा लेगा। रस्ट को संकलित करने के लिए आपको अपने प्रोग्राम को मेमोरी-सुरक्षित बनाना होगा।
जब आप जंग के लिए नए होते हैं तो उधार लेने वाला चेकर परेशान होता है। लेकिन, जैसा कि आप अधिक रस्ट कोड लिखते हैं, आपको इसकी आदत हो जाएगी और मेमोरी-सुरक्षित रस्ट कोड लिखने का अनुभव प्राप्त होगा।