Rust 1.36 پروگرامنگ لینگویج ریلیز

شائع ہوا سسٹم پروگرامنگ لینگویج ریلیز زنگ 1.36موزیلا پروجیکٹ کے ذریعہ قائم کیا گیا ہے۔ زبان میموری کی حفاظت پر توجہ مرکوز کرتی ہے، خودکار میموری کا انتظام فراہم کرتی ہے، اور کوڑا اٹھانے والے یا رن ٹائم کا استعمال کیے بغیر اعلیٰ کام کے متوازی کو حاصل کرنے کا ذریعہ فراہم کرتی ہے۔

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

اہم بدعات:

  • خصلت مستحکم ہوئی۔ مستقبل، جو ایک ایسی قدر کی نمائندگی کرتا ہے جس کی تشخیص async / .await بلاکس کا استعمال کرتے ہوئے ابھی تک مکمل نہیں ہوسکتی ہے۔ مستقبل کا استعمال کرتے ہوئے متعین غیر مطابقت پذیر اقدار تھریڈ میں مفید کام کو جاری رکھنا ممکن بناتی ہیں، جبکہ بیک وقت کسی خاص قدر کے حسابات کی تکمیل کا انتظار کرتے ہوئے؛
  • لائبریری مستحکم ہو گئی۔ alloc، جو میموری سے مختص اقدار کو منظم کرنے کے لیے سمارٹ پوائنٹرز اور مجموعے فراہم کرتا ہے۔ ایس ٹی ڈی میں میموری ایلوکیشن اب ٹائپ کا استعمال کرتی ہے۔ Vec، جو alloc سے دوبارہ برآمد ہوتے ہیں۔ alloc کا علیحدہ استعمال ایسی ایپلی کیشنز میں معنی رکھتا ہے جو std ("#![no_std]") سے منسلک نہیں ہیں، اور ساتھ ہی ایسی لائبریریوں میں جو ایس ٹی ڈی کے بغیر اسی طرح کے پروگراموں میں استعمال کے لیے ڈیزائن کی گئی ہیں۔
  • اقدار کی درست شروعات کے لیے چیک کو نظرانداز کرنے کے لیے مجوزہ درمیانی قسم شاید یونٹ، جسے mem::غیر شروع شدہ فنکشن کے بجائے محفوظ متبادل کے طور پر استعمال کیا جا سکتا ہے۔ میم::غیر شروع شدہ فنکشن تیزی سے صفوں کو بنانے کے لیے آسان ہے، لیکن یہ کمپائلر کو گمراہ کرتا ہے کیونکہ بظاہر اس کی ابتدا ہوئی ہے، لیکن حقیقت میں قدر غیر شروع ہی رہتی ہے۔ MaybeUninit آپ کو کمپائلر کو واضح طور پر اس بات کی نشاندہی کرنے کی اجازت دیتا ہے کہ قیمت غیر شروع کی گئی ہے، اس سے منسلک ممکنہ غیر متعینہ رویے کو مدنظر رکھتے ہوئے، اور "شاید_t:" اور مرحلہ وار آغاز کے ذریعے پروگراموں میں چیکس کو منظم کرنے کے لیے، اس کی تکمیل کو نشان زد کرتے ہوئے ".assume_init()" کال کا استعمال کرتے ہوئے. MaybeUninit کی آمد کے ساتھ، mem::uninitialized فنکشن کو فرسودہ کر دیا گیا ہے اور اسے استعمال کے لیے تجویز نہیں کیا گیا ہے۔
  • NLL (Non-Lexical Lifetimes) تکنیک، جس نے قرضے لیے گئے متغیرات کی زندگی بھر ریکارڈ کرنے کے لیے نظام کو بڑھایا، اسے Rust 2015 زبان کے لیے مستحکم کر دیا گیا ہے (ابتدائی طور پر، NLL کو صرف Rust 2018 کے ذریعے سپورٹ کیا گیا تھا)۔ لغوی سطح پر زندگی بھر کرنے کے بجائے، NLL ایسا کرتا ہے ایگزیکیوشن فلو گراف میں پوائنٹرز کے سیٹ کی سطح پر۔ یہ نقطہ نظر آپ کو متغیرات کے ادھار کی جانچ پڑتال کے معیار کو بڑھانے کی اجازت دیتا ہے (چیککر ادھار) اور کچھ قسم کے درست کوڈ پر عمل درآمد کی اجازت دیتا ہے، جس کے استعمال سے پہلے غلطی ہوئی تھی۔ نیا رویہ ڈیبگنگ کو بھی بہت آسان بنا دیتا ہے۔
  • ایسوسی ایٹیو صفوں کا نیا نفاذ شامل ہے۔ ہش میپ، ساخت کی درخواست کی بنیاد پر سوئس ٹیبل (خود کار طریقے سے لوڈ hashbrown::HashMap، جب تک کہ واضح طور پر دوسری صورت میں بیان نہ کیا جائے، مثال کے طور پر std::HashMap، جو SipHash 1-3 پر مبنی ہے)۔ سافٹ ویئر کا انٹرفیس وہی رہتا ہے، اور ڈیولپر کے لیے نمایاں فرق کارکردگی میں اضافہ اور میموری کی کھپت میں کمی پر ابلتے ہیں۔
  • پیکیج مینیجر کارگو میں شامل کیا "--آف لائن" آپشن، جو نیٹ ورک تک رسائی کے بغیر آپریشن کو قابل بناتا ہے، جس میں صرف مقامی سسٹم میں کیش کردہ پیکیجز ہی استعمال کیے جاتے ہیں جب انحصار انسٹال کرتے ہیں۔ اگر انحصار مقامی کیشے میں نہیں ہے تو، ایک غلطی پھینک دی جائے گی۔ آف لائن جانے سے پہلے مقامی کیشے میں انحصار کو پہلے سے لوڈ کرنے کے لیے، آپ "cargo fetch" کمانڈ استعمال کر سکتے ہیں۔
  • میکرو کو "dbg!" کال کرنے کی صلاحیت کو نافذ کیا۔ کئی دلائل کی نشاندہی کرنا؛
  • "const" وصف، جو مستقل کی بجائے کسی بھی سیاق و سباق میں استعمال کرنے کے امکان کا تعین کرتا ہے، طریقوں کے لیے استعمال ہوتا ہے۔
    لے آؤٹ::from_size_align_unchecked،
    mem::needs_drop،
    NonNull::Dangling and
    NonNull::cast;

  • APIs کے ایک نئے حصے کو مستحکم زمرے میں منتقل کر دیا گیا ہے، بشمول وہ طریقے جو مستحکم کیے گئے ہیں۔
    ٹاسک:: ویکر، ٹاسک:: پول،
    VecDeque::rotate_left، VecDeque::rotate_right،
    پڑھیں::پڑھیں_ویکٹرڈ، لکھیں::لکھیں_ویکٹرڈ،
    تکرار کرنے والا::کاپی،
    BorrowMut (سٹرنگز کے لیے) اور str::as_mut_ptr۔

ماخذ: opennet.ru

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