असेंबली इंसर्ट के समर्थन के साथ रस्ट 1.59 प्रोग्रामिंग भाषा का विमोचन

मोज़िला परियोजना द्वारा स्थापित रस्ट 1.59 सामान्य-उद्देश्य प्रोग्रामिंग भाषा की रिलीज़, लेकिन अब स्वतंत्र गैर-लाभकारी संगठन रस्ट फाउंडेशन के तत्वावधान में विकसित की गई है। भाषा स्मृति सुरक्षा पर ध्यान केंद्रित करती है और कचरा संग्राहक और रनटाइम के उपयोग से परहेज करते हुए उच्च कार्य समानता प्राप्त करने का साधन प्रदान करती है (रनटाइम को बुनियादी आरंभीकरण और मानक पुस्तकालय के रखरखाव के लिए कम किया जाता है)।

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

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

मुख्य नवाचार:

  • असेंबली भाषा आवेषण का उपयोग करना संभव है, जो उन अनुप्रयोगों में मांग में हैं जिन्हें निम्न स्तर पर निष्पादन को नियंत्रित करने या विशेष मशीन निर्देशों का उपयोग करने में सक्षम होने की आवश्यकता है। असेंबली इंसर्ट मैक्रोज़ "एएसएम!" का उपयोग करके जोड़े जाते हैं। और "ग्लोबल_एएसएम!" रस्ट में स्ट्रिंग प्रतिस्थापन के लिए उपयोग किए जाने वाले समान रजिस्टरों के नामकरण के लिए स्ट्रिंग फ़ॉर्मेटिंग सिंटैक्स का उपयोग करना। कंपाइलर x86, x86-64, ARM, AArch64 और RISC-V आर्किटेक्चर के लिए असेंबली निर्देशों का समर्थन करता है। प्रविष्टि उदाहरण: std::arch::asm; का उपयोग करें // शिफ्ट का उपयोग करके x को 6 से गुणा करें और लेट म्यूट x जोड़ें: u64 = 4; असुरक्षित { एएसएम! ) एक्स, टीएमपी = आउट(रेग) _, ); }assert_eq!(x, 1 * 2);
  • संरचित (समानांतर) असाइनमेंट के लिए समर्थन जोड़ा गया, जिसमें अभिव्यक्ति के बाईं ओर कई लक्षण, स्लाइस या संरचनाएं निर्दिष्ट हैं। उदाहरण के लिए: चलो (ए, बी, सी, डी, ई); (ए, बी) = (1, 2); [सी, .., डी, _] = [1, 2, 3, 4, 5]; संरचना { ई, .. } = संरचना { ई: 5, एफ: 3 }; assert_eq!([1, 2, 1, 4, 5], [ए, बी, सी, डी, ई]);
  • कॉन्स्ट जेनेरिक के लिए डिफ़ॉल्ट मान निर्दिष्ट करना संभव है: स्ट्रक्चर ऐरेस्टोरेज { गिरफ्तार: [टी; एन], } निहितार्थ ऐरेस्टोरेज { एफएन नया (ए: टी, बी: टी) -> ऐरेस्टोरेज { एरेस्टोरेज { एआरआर: [ए, बी], } } }
  • कार्गो पैकेज प्रबंधक निर्भरता में अमान्य संरचनाओं के उपयोग के बारे में चेतावनी प्रदान करता है जो कंपाइलर में त्रुटियों के कारण संसाधित होते हैं (उदाहरण के लिए, एक त्रुटि के कारण, पैक किए गए संरचनाओं के क्षेत्रों को सुरक्षित ब्लॉकों में उधार लेने की अनुमति दी गई थी)। ऐसे निर्माण अब रस्ट के भविष्य के संस्करण में समर्थित नहीं होंगे।
  • कार्गो और रस्टसी में एक अलग उपयोगिता को कॉल करने की आवश्यकता के बिना, डिबगिंग डेटा (स्ट्रिप = "डीबगिनफो") और प्रतीकों (स्ट्रिप = "प्रतीक") से अलग निष्पादन योग्य फ़ाइलें उत्पन्न करने की अंतर्निहित क्षमता है। सफाई सेटिंग Cargo.toml में "स्ट्रिप" पैरामीटर के माध्यम से कार्यान्वित की जाती है: [प्रोफ़ाइल.रिलीज़] स्ट्रिप = "डीबगिनफ़ो", "प्रतीक"
  • वृद्धिशील संकलन डिफ़ॉल्ट रूप से अक्षम है। इसका कारण कंपाइलर में एक बग के लिए एक अस्थायी समाधान बताया जाता है जो क्रैश और डिसेरिएलाइज़ेशन त्रुटियों का कारण बनता है। बग फिक्स पहले ही तैयार किया जा चुका है और इसे अगली रिलीज में शामिल किया जाएगा। वृद्धिशील संकलन वापस करने के लिए, आप पर्यावरण चर RUSTC_FORCE_INCREMENTAL=1 का उपयोग कर सकते हैं।
  • एपीआई के एक नए हिस्से को स्थिर की श्रेणी में ले जाया गया है, जिसमें विधियों और लक्षणों के कार्यान्वयन को स्थिर किया गया है:
    • std::thread::available_parallelism
    • परिणाम::कॉपी किया गया
    • परिणाम::क्लोन किया गया
    • आर्क::एएसएम!
    • आर्क::ग्लोबल_एएसएम!
    • ऑप्स::कंट्रोलफ़्लो::is_break
    • ऑप्स::कंट्रोलफ़्लो::is_continue
    • U8 के लिए TryFrom
    • char::TryFromCharError (क्लोन, डीबग, डिस्प्ले, पार्टियलईक्यू, कॉपी, ईक, त्रुटि)
    • iter::zip
    • नॉनजीरोयू8::is_power_of_two
    • नॉनजीरोयू16::is_power_of_two
    • नॉनजीरोयू32::is_power_of_two
    • नॉनजीरोयू64::is_power_of_two
    • नॉनजीरोयू128::is_power_of_two
    • ToLowercase संरचना के लिए DoubleEndedIterator
    • ToUppercase संरचना के लिए DoubleEndedIterator
    • TryFrom<&mut [T]> के लिए [T; एन]
    • वन्स संरचना के लिए अनविंडसेफ
    • एक बार के लिए RefUnwindSafe
    • aarch8 के लिए कंपाइलर में निर्मित Armv64 नियॉन समर्थन फ़ंक्शन
  • "कॉन्स्ट" विशेषता, जो स्थिरांक के बजाय किसी भी संदर्भ में इसका उपयोग करने की संभावना निर्धारित करती है, का उपयोग कार्यों में किया जाता है:
    • mem::शायदUninit::as_ptr
    • मेम::शायदयूनीनिट::मान लीजिए_इनिट
    • मेम::शायदयूनीनिट::मान लीजिए_इनिट_रेफ
    • ffi::CSt::from_bytes_with_nul_unchecked

स्रोत: opennet.ru

एक टिप्पणी जोड़ें