Rust 1.63 عام مقصد کی پروگرامنگ لینگویج کی ریلیز، جسے Mozilla پروجیکٹ نے قائم کیا تھا، لیکن اب اسے آزاد غیر منافع بخش تنظیم Rust Foundation کے زیر اہتمام تیار کیا گیا ہے، شائع کیا گیا ہے۔ زبان میموری کی حفاظت پر توجہ مرکوز کرتی ہے اور کوڑا اٹھانے والے اور رن ٹائم کے استعمال سے گریز کرتے ہوئے اعلی ملازمت کے متوازی کو حاصل کرنے کے ذرائع فراہم کرتی ہے (رن ٹائم کو معیاری لائبریری کی بنیادی شروعات اور دیکھ بھال تک کم کیا جاتا ہے)۔
زنگ کے میموری ہینڈلنگ کے طریقے ڈویلپر کو پوائنٹرز میں ہیرا پھیری کرتے وقت غلطیوں سے بچاتے ہیں اور نچلے درجے کی میموری ہینڈلنگ کی وجہ سے پیدا ہونے والے مسائل سے بچاتے ہیں، جیسے کہ میموری کے علاقے کو آزاد ہونے کے بعد اس تک رسائی حاصل کرنا، null pointers کا حوالہ دینا، بفر اووررن وغیرہ۔ لائبریریوں کو تقسیم کرنے، تعمیرات فراہم کرنے اور انحصار کا انتظام کرنے کے لیے، پروجیکٹ کارگو پیکیج مینیجر کو تیار کرتا ہے۔ کتب خانوں کی میزبانی کے لیے crates.io ریپوزٹری معاون ہے۔
Reference چیکنگ، آبجیکٹ کی ملکیت پر نظر رکھنے، آبجیکٹ کے لائف ٹائم (اسکوپس) کا ٹریک رکھنے اور کوڈ پر عمل درآمد کے دوران میموری تک رسائی کی درستگی کا اندازہ لگانے کے ذریعے رسٹ میں میموری کی حفاظت فراہم کی جاتی ہے۔ زنگ انٹیجر اوور فلو کے خلاف بھی تحفظ فراہم کرتا ہے، استعمال سے پہلے متغیر اقدار کی لازمی ابتداء کی ضرورت ہوتی ہے، معیاری لائبریری میں غلطیوں کو بہتر طریقے سے ہینڈل کرتا ہے، غیر متغیر حوالہ جات اور متغیرات کے تصور کو بطور ڈیفالٹ لاگو کرتا ہے، منطقی غلطیوں کو کم کرنے کے لیے مضبوط جامد ٹائپنگ پیش کرتا ہے۔
اہم اختراعات:
- std::thread::scope API کو شامل کر دیا گیا ہے، جس سے اسکوپڈ تھریڈز بنانے کی اجازت دی گئی ہے۔ پہلے سے دستیاب تھریڈز کے برعکس، نیا std::thread::scope API غیر جامد ڈیٹا کو ادھار لینے کی اجازت دیتا ہے، جبکہ کلاسک std::thread::spawn API کا استعمال کرتے ہوئے بنائے گئے تھریڈز کو تمام منظور شدہ دلائل کا مالک ہونا پڑتا ہے اور وہ مستعار متغیرات حاصل نہیں کر سکتا تھا۔ std::thread::scope API اس بات کی ضمانت دیتا ہے کہ کوئی بھی پیدا شدہ دھاگہ ڈیٹا واپس کرنے سے پہلے ختم ہو جائے گا، قرض لینے کے طریقہ کار کے لیے مطلوبہ سطح کی حفاظت فراہم کرتا ہے۔
- نئی فائل ڈسکرپٹر بائنڈنگ اقسام، BorrowedFd اور OwnedFd، تجویز کی گئی ہیں، جو قرض لینے اور ملکیت فراہم کرتی ہیں۔ اقسام کو "#[repr(شفاف)]" کے ساتھ نشان زد کیا گیا ہے، جس سے انہیں براہ راست ملکیت کے ساتھ بیرونی C بائنڈنگ میں استعمال کیا جا سکتا ہے۔
- Condvar::new، Mutex::new، اور RwLock::ne کو مسلسل سیاق و سباق میں کال کرنے کی اہلیت فراہم کی ہے تاکہ عالمی جامد Mutex، RwLock، اور Condvar ویلیوز کو lazy_static پیکیجز استعمال کیے بغیر بنایا جا سکے۔
- قسم fn foo کے افعال کے لیے (value: T, f: impl Copy) نحو جیسے "foo:: کی اجازت ہے۔ (3, 3)”، واضح طور پر عام کی قسم کی نشاندہی کرتا ہے۔
- متغیر قرضے کے مسائل کا پتہ لگانے کے لیے NLL (Non-Lexical Lifetimes) تکنیک میں منتقلی مکمل ہو چکی ہے۔ این ایل ایل ایگزیکیوشن فلو گراف میں پوائنٹرز کے ایک سیٹ کی سطح پر اکاؤنٹنگ کرتا ہے، جو قرض لینے والے کی کوالٹی کو بہتر بناتا ہے اور کچھ خاص قسم کے درست کوڈ پر عمل درآمد کی اجازت دیتا ہے جس کے نتیجے میں پہلے غلطیاں ہوتی تھیں۔ پرانے میکانزم کے لیے سپورٹ، جس میں لغوی لائف ٹائم بائنڈنگ کا استعمال ہوتا تھا، اب rustc سے مکمل طور پر ہٹا دیا گیا ہے، اور نئے NLL کا استعمال عالمی سطح پر نافذ کر دیا گیا ہے۔
- API کے ایک نئے حصے کو مستحکم کے زمرے میں منتقل کر دیا گیا ہے، بشمول خصوصیات کے طریقوں اور نفاذ کو مستحکم کیا گیا ہے:
- array::from_fn
- باکس::into_pin
- BinaryHeap ::try_reserve
- BinaryHeap::try_reserve_exact
- OsString::try_reserve
- OsString::try_reserve_exact
- پاتھ بف::ٹری_ریزرو
- PathBuf::try_reserve_exact
- پاتھ:: try_exists
- Ref::filter_map
- RefMut::filter_map
- NonNull::<[T]>::len
- ToOwned::clone_into
- Ipv6Addr::to_ipv4_mapped
- unix::io::AsFd
- unix::io::BorrowedFd<'fd>
- unix::io::OwnedFd
- windows::io::AsHandle
- windows::io::BorrowedHandle
ماخذ: opennet.ru
