खोज…


परिचय

जब रस्ट प्रोग्राम एक ऐसी स्थिति में पहुंच जाते हैं जहां एक महत्वपूर्ण त्रुटि हुई है, तो panic! मैक्रो को जल्दी से बाहर निकलने के लिए कहा जा सकता है (अक्सर तुलना की जाती है, लेकिन अन्य भाषाओं में एक अपवाद के लिए, अलग-अलग)। उचित त्रुटि हैंडलिंग में Result प्रकार शामिल होने चाहिए, हालांकि यह अनुभाग केवल panic! पर चर्चा करेगा panic! और इसकी अवधारणाएँ।

टिप्पणियों

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

घबराने की कोशिश न करें

जंग में, एक कार्यक्रम में कुछ गलत होने का संकेत देने के दो मुख्य तरीके हैं: एक फ़ंक्शन ( संभावित कस्टम-परिभाषित ) Err(E) , Result<T, E> प्रकार और एक panic! लौट रहा है panic!

पैनकिंग अपवादों के लिए एक विकल्प नहीं है, जो आमतौर पर अन्य भाषाओं में पाए जाते हैं। जंग में, एक आतंक यह इंगित करने के लिए है कि कुछ गंभीर रूप से गलत हो गया है और यह जारी नहीं रह सकता है। यहाँ push लिए Vec स्रोत से एक उदाहरण है:

pub fn push(&mut self, value: T) {
    // This will panic or abort if we would allocate > isize::MAX bytes
    // or if the length increment would overflow for zero-sized types.
    if self.len == self.buf.cap() {
        self.buf.double();
    }
    ...
}

यदि हम मेमोरी से बाहर निकलते हैं, तो बहुत कुछ और नहीं हो सकता है, इसलिए यह या तो घबरा जाएगा (डिफ़ॉल्ट व्यवहार) या गर्भपात (जिसे संकलन ध्वज के साथ सेट करने की आवश्यकता है)।

पंटिंग स्टैक को खोल देगा, विनाशकों को चलाएगा और यह सुनिश्चित करेगा कि मेमोरी को साफ किया जाए। एबॉर्ट ऐसा नहीं करता है, और इसे ठीक से साफ करने के लिए ओएस पर निर्भर करता है।

निम्नलिखित प्रोग्राम को सामान्य रूप से और दोनों के साथ चलाने का प्रयास करें

[profile.dev]
panic = "abort"

अपने Cargo.toml

// main.rs
struct Foo(i32);
impl Drop for Foo {
    fn drop(&mut self) {
        println!("Dropping {:?}!", self.0);
    }
}
fn main() {
    let foo = Foo(1);
    panic!("Aaaaaaahhhhh!");
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow