एक एकल एपोस्ट्रोफ के साथ रस्ट प्रकार को किस रूप में निरूपित किया जाता है?


94

मैंने एक एकल एपोस्ट्रोफ के साथ निरूपित रुस्त में कई प्रकारों का सामना किया है:

'static
'r
'a

उस धर्मोपदेश का क्या महत्व है? शायद यह संदर्भों का एक संशोधक ( &) है? संदर्भों के लिए सामान्य टाइपिंग? मुझे नहीं पता कि इसके लिए दस्तावेज़ कहाँ छुपा है।


1
इन्हें जीवनकाल का नाम दिया गया है: static.rust-lang.org/doc/master/guide-lifetimes.html
Arjan

पिछली टिप्पणी में लिंक अब काम नहीं करता है। मुझे नहीं पता कि यह समतुल्य है: doc.rust-lang.org/book/lifetimes.html
एलेन स्पार्टस

एलेन की कड़ी ने भी काम करना बंद कर दिया है - यहाँ नया (जून 2019 तक): doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

जवाबों:


75

ये रस्ट नामांकित जीवनकाल हैं।

जंग प्रोग्रामिंग भाषा से उद्धरण :

रस्ट के प्रत्येक संदर्भ में एक जीवनकाल होता है, जो कि उस संदर्भ के लिए गुंजाइश है जो मान्य है। अधिकांश समय जीवनकाल का निहितार्थ और अनुमान लगाया जाता है, ठीक उसी तरह जैसे अधिकांश समय अनुमान लगाए जाते हैं। इसी तरह जब हमें कई प्रकार के एनोटेट करने होते हैं, क्योंकि कई प्रकार संभव होते हैं, तो ऐसे मामले भी होते हैं, जिनमें संदर्भों के जीवनकाल को कुछ अलग तरीकों से संबंधित किया जा सकता है, इसलिए रुस्ट को हमें जेनेरिक लाइफटाइम मापदंडों का उपयोग करके रिश्तों की व्याख्या करने की आवश्यकता है ताकि यह सुनिश्चित हो सके रनटाइम पर उपयोग किए जाने वाले वास्तविक संदर्भ निश्चित रूप से मान्य होंगे।

लाइफटाइम एनोटेशन में कोई भी संदर्भ शामिल नहीं है कि कितने समय तक रहते हैं। उसी तरह से जो फ़ंक्शन किसी भी प्रकार को स्वीकार कर सकता है जब हस्ताक्षर एक सामान्य प्रकार के पैरामीटर को निर्दिष्ट करता है, तो फ़ंक्शन किसी भी जीवनकाल के संदर्भ को स्वीकार कर सकता है जब हस्ताक्षर एक सामान्य जीवनकाल पैरामीटर को निर्दिष्ट करता है। जीवन भर के एनोटेशन एक दूसरे के लिए कई संदर्भों के जीवनकाल से संबंधित हैं।

लाइफटाइम एनोटेशन में थोड़ा असामान्य सिंटैक्स होता है: जीवनकाल के मापदंडों के नाम एपोस्ट्रोफ से शुरू होने चाहिए '। जीवनकाल के मापदंडों के नाम आमतौर पर सभी निचले होते हैं, और सामान्य प्रकारों की तरह, उनके नाम आमतौर पर बहुत कम होते हैं। 'aवह नाम है जिसे अधिकांश लोग डिफ़ॉल्ट के रूप में उपयोग करते हैं। आजीवन पैरामीटर एनोटेशन &एक संदर्भ के बाद जाते हैं , और एक स्पेस संदर्भ के प्रकार से आजीवन एनोटेशन को अलग करता है।

एक अन्य तरीके से कहा, एक जीवनकाल निष्पादन की अवधि का अनुमान लगाता है जिसके दौरान डेटा एक संदर्भ बिंदु मान्य है। रस्ट कंपाइलर रूढ़िवादी रूप से सुरक्षित होने के लिए कम से कम जीवनकाल का अनुमान लगाएगा। यदि आप संकलक को बताना चाहते हैं कि एक संदर्भ सबसे कम अनुमान से अधिक समय तक रहता है, तो आप यह कह सकते हैं कि आउटपुट संदर्भ, उदाहरण के लिए, दिए गए इनपुट संदर्भ के समान जीवनकाल है।

'staticकार्यक्रम की अवधि के लिए - जीवन भर के लिए एक विशेष जीवन, सबसे लंबे समय तक सब जीवन काल के रहते थे। एक विशिष्ट उदाहरण स्ट्रिंग "शाब्दिक" है जो हमेशा कार्यक्रम / मॉड्यूल के जीवनकाल के दौरान उपलब्ध होगा।

आप इस स्लाइड डेक से अधिक जानकारी प्राप्त कर सकते हैं , जो स्लाइड 29 के आसपास शुरू होगी।

जंग में जीवनकाल भी कुछ गहराई में जीवनकाल की चर्चा करता है।


0

Quux00 के उत्कृष्ट उत्तर को जोड़ने के लिए, नामांकित जीवनकाल का उपयोग जंगले संकलक को लौटे उधार चर की उत्पत्ति को इंगित करने के लिए किया जाता है।

यह समारोह

pub fn f(a: &str, b: &str) -> &str {
  b
}

संकलित नहीं करेंगे क्योंकि यह एक उधार लिया गया मान लौटाता है, लेकिन यह निर्दिष्ट नहीं करता है कि उसने इसे उधार लिया है aया नहीं b

इसे ठीक करने के लिए, आप नामांकित जीवनकाल घोषित करेंगे bऔर वापसी के प्रकार के लिए उसी जीवनकाल का उपयोग करेंगे :

pub fn f<'r>(a: &str, b: &'r str) -> &'r str {
//      ----              ---         ---
  b
}

और उम्मीद के मुताबिक इसका इस्तेमाल करें

f("a", "b")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.