رسٹ 1.59 پروگرامنگ لینگویج کی ریلیز جس میں اسمبلی انسرٹس کے لیے سپورٹ ہے۔

Rust 1.59 عام مقصد کی پروگرامنگ لینگویج کی ریلیز، جسے Mozilla پروجیکٹ نے قائم کیا تھا، لیکن اب اسے آزاد غیر منافع بخش تنظیم Rust Foundation کے زیر اہتمام تیار کیا گیا ہے، شائع کیا گیا ہے۔ زبان میموری کی حفاظت پر توجہ مرکوز کرتی ہے اور کوڑا اٹھانے والے اور رن ٹائم کے استعمال سے گریز کرتے ہوئے اعلی ملازمت کے متوازی کو حاصل کرنے کے ذرائع فراہم کرتی ہے (رن ٹائم کو معیاری لائبریری کی بنیادی شروعات اور دیکھ بھال تک کم کیا جاتا ہے)۔

زنگ کے میموری ہینڈلنگ کے طریقے ڈویلپر کو پوائنٹرز میں ہیرا پھیری کرتے وقت غلطیوں سے بچاتے ہیں اور نچلے درجے کی میموری ہینڈلنگ کی وجہ سے پیدا ہونے والے مسائل سے بچاتے ہیں، جیسے کہ میموری کے علاقے کو آزاد ہونے کے بعد اس تک رسائی حاصل کرنا، null pointers کا حوالہ دینا، بفر اووررن وغیرہ۔ لائبریریوں کو تقسیم کرنے، تعمیرات فراہم کرنے اور انحصار کا انتظام کرنے کے لیے، پروجیکٹ کارگو پیکیج مینیجر کو تیار کرتا ہے۔ کتب خانوں کی میزبانی کے لیے crates.io ریپوزٹری معاون ہے۔

Reference چیکنگ، آبجیکٹ کی ملکیت پر نظر رکھنے، آبجیکٹ کے لائف ٹائم (اسکوپس) کا ٹریک رکھنے اور کوڈ پر عمل درآمد کے دوران میموری تک رسائی کی درستگی کا اندازہ لگانے کے ذریعے رسٹ میں میموری کی حفاظت فراہم کی جاتی ہے۔ زنگ انٹیجر اوور فلو کے خلاف بھی تحفظ فراہم کرتا ہے، استعمال سے پہلے متغیر اقدار کی لازمی ابتداء کی ضرورت ہوتی ہے، معیاری لائبریری میں غلطیوں کو بہتر طریقے سے ہینڈل کرتا ہے، غیر متغیر حوالہ جات اور متغیرات کے تصور کو بطور ڈیفالٹ لاگو کرتا ہے، منطقی غلطیوں کو کم کرنے کے لیے مضبوط جامد ٹائپنگ پیش کرتا ہے۔

اہم اختراعات:

  • اسمبلی لینگوئج انسرٹس کا استعمال کرنا ممکن ہے، جن کی ایپلی کیشنز میں مانگ ہوتی ہے جنہیں کم سطح پر عملدرآمد کو کنٹرول کرنے کی ضرورت ہوتی ہے یا مشین کی خصوصی ہدایات استعمال کرنے کے قابل ہوتے ہیں۔ اسمبلی داخلوں کو میکروز کا استعمال کرتے ہوئے شامل کیا جاتا ہے "asm!" اور "عالمی_اسم!" نام دینے والے رجسٹروں کے لیے سٹرنگ فارمیٹنگ نحو کا استعمال اسی طرح کی ہے جو زنگ میں سٹرنگ متبادل کے لیے استعمال ہوتا ہے۔ کمپائلر x86، x86-64، ARM، AArch64 اور RISC-V آرکیٹیکچرز کے لیے اسمبلی ہدایات کی حمایت کرتا ہے۔ داخل کرنے کی مثال: استعمال کریں std::arch::asm؛ // شفٹوں کا استعمال کرتے ہوئے x کو 6 سے ضرب دیں اور let mut x: u64 = 4; غیر محفوظ { asm! ) x, tmp = out(reg) _, ); } assert_eq!(x, 1*2);
  • تخریب شدہ (متوازی) اسائنمنٹس کے لیے شامل کیا گیا تعاون، جس میں اظہار کے بائیں جانب کئی خصلتوں، سلائسس یا ڈھانچے کی وضاحت کی گئی ہے۔ مثال کے طور پر: let (a, b, c, d, e); (a, b) = (1, 2)؛ [c, .., d, _] = [1, 2, 3, 4, 5]; ساخت { e, .. } = ساخت { e: 5, f: 3 }; assert_eq!([1, 2, 1, 4, 5], [a, b, c, d, e]);
  • const generics کے لیے پہلے سے طے شدہ اقدار کی وضاحت کرنے کی صلاحیت فراہم کی گئی ہے: struct ArrayStorage {arr: [T; N]، } impl ArrayStorage { fn new(a: T, b: T) -> ArrayStorage { ArrayStorage { arr: [a, b], } }
  • کارگو پیکیج مینیجر انحصار میں غلط ڈھانچے کے استعمال کے بارے میں انتباہات فراہم کرتا ہے جو کمپائلر میں غلطیوں کی وجہ سے پروسیس ہوتے ہیں (مثال کے طور پر، ایک خرابی کی وجہ سے، پیکڈ ڈھانچے کے فیلڈز کو محفوظ بلاکس میں ادھار لینے کی اجازت دی گئی تھی)۔ اس طرح کی تعمیرات کو زنگ کے مستقبل کے ورژن میں مزید تعاون نہیں کیا جائے گا۔
  • Cargo اور rustc میں ڈیبگنگ ڈیٹا (strip = "debuginfo") اور علامتوں (strip = "symbols") سے خارج ہونے والی قابل عمل فائلیں پیدا کرنے کی بلٹ ان صلاحیت ہے، بغیر کسی علیحدہ یوٹیلیٹی کو کال کرنے کی ضرورت ہے۔ صفائی کی ترتیب Cargo.toml میں "سٹرپ" پیرامیٹر کے ذریعے لاگو کی جاتی ہے: [profile.release] strip = "debuginfo"، "symbols"
  • اضافی تالیف بطور ڈیفالٹ غیر فعال ہے۔ اس کی وجہ کمپائلر میں ایک بگ کے لیے ایک عارضی حل بتایا جاتا ہے جو کریش اور ڈی سیریلائزیشن کی غلطیوں کا باعث بنتا ہے۔ ایک بگ فکس پہلے ہی تیار کیا جا چکا ہے اور اسے اگلی ریلیز میں شامل کیا جائے گا۔ اضافی تالیف واپس کرنے کے لیے، آپ ماحولیاتی متغیر RUSTC_FORCE_INCREMENTAL=1 استعمال کر سکتے ہیں۔
  • API کے ایک نئے حصے کو مستحکم کے زمرے میں منتقل کر دیا گیا ہے، بشمول خصوصیات کے طریقوں اور نفاذ کو مستحکم کیا گیا ہے:
    • std::thread::available_parallelism
    • نتیجہ::کاپی
    • نتیجہ::کلون
    • arch::asm!
    • arch::global_asm!
    • ops::ControlFlow::is_break
    • ops::ControlFlow::is_continue
    • U8 کے لیے TryFrom
    • char::TryFromCharError (کلون، ڈیبگ، ڈسپلے، PartialEq، کاپی، Eq، خرابی)
    • iter::zip
    • NonZeroU8::is_power_of_two
    • NonZeroU16::is_power_of_two
    • NonZeroU32::is_power_of_two
    • NonZeroU64::is_power_of_two
    • NonZeroU128::is_power_of_two
    • ToLowercase ڈھانچے کے لیے DoubleEndedIterator
    • ToUppercase ساخت کے لیے DoubleEndedIterator
    • TryFrom<&mut [T]> کے لیے [T; ن]
    • ایک بار کے ڈھانچے کے لئے ان ونڈ سیف
    • ایک بار کے لیے RefUnwindSafe
    • armv8 neon سپورٹ فنکشنز aarch64 کے کمپائلر میں بنائے گئے ہیں۔
  • "const" وصف، جو مستقل کی بجائے اسے کسی بھی سیاق و سباق میں استعمال کرنے کے امکان کا تعین کرتا ہے، افعال میں استعمال ہوتا ہے:
    • mem::MaybeUninit::as_ptr
    • mem::MaybeUninit::assume_init
    • mem::MaybeUninit::assume_init_ref
    • ffi::CStr::from_bytes_with_nul_unchecked

ماخذ: opennet.ru

نیا تبصرہ شامل کریں