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

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

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

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

  • لائن فارمیٹنگ بلاکس میں، نمبر اور نام کے لحاظ سے ایک لائن کے بعد واضح طور پر درج متغیرات کو تبدیل کرنے کی پہلے دستیاب صلاحیت کے علاوہ، لائن میں اظہار "{identifier}" شامل کرکے صوابدیدی شناخت کنندگان کو تبدیل کرنے کی صلاحیت کو لاگو کیا جاتا ہے۔ مثال کے طور پر: // پہلے سے تعاون یافتہ تعمیرات: println!("Hello, {}!", get_person()); println!("ہیلو، {0}!", get_person()); println!("Hello, {person}!", person = get_person()); // اب آپ let person = get_person(); println!("ہیلو، {شخص}!")؛

    شناخت کنندگان کو براہ راست فارمیٹنگ کے اختیارات میں بھی بیان کیا جا سکتا ہے۔ let (width, precision) = get_format(); get_scores() { println!("{name}: {score:width$.precision$}") میں (نام، اسکور) کے لیے؛ }

    نیا متبادل ان تمام میکرو میں کام کرتا ہے جو سٹرنگ فارمیٹ کی تعریف کو سپورٹ کرتے ہیں، ماسوائے "گھبراہٹ!" زنگ زبان کے 2015 اور 2018 کے ورژن میں، جس میں گھبراہٹ!("{ident}") کو باقاعدہ سٹرنگ سمجھا جاتا ہے (Rust 2021 میں متبادل کام کرتا ہے)۔

  • ونڈوز پلیٹ فارم پر std::process::کمانڈ کے ڈھانچے کے رویے کو تبدیل کر دیا گیا ہے تاکہ کمانڈز پر عمل کرتے وقت، سیکورٹی وجوہات کی بناء پر، یہ موجودہ ڈائرکٹری میں قابل عمل فائلوں کی تلاش نہیں کرتا ہے۔ موجودہ ڈائرکٹری کو خارج کر دیا گیا ہے کیونکہ اگر پروگرام غیر بھروسہ مند ڈائریکٹریز (CVE-2021-3013) میں چلائے جاتے ہیں تو اسے نقصان دہ کوڈ کو چلانے کے لیے استعمال کیا جا سکتا ہے۔ نئی ایگزیکیوٹیبل ڈیٹیکشن لاجک میں Rust ڈائریکٹریز، ایپلیکیشن ڈائرکٹری، ونڈوز سسٹم ڈائرکٹری، اور PATH ماحول کے متغیر میں مخصوص ڈائریکٹریز کو تلاش کرنا شامل ہے۔
  • معیاری لائبریری نے ریٹرن ویلیو کو نظر انداز کرنے کی صورت میں انتباہ جاری کرنے کے لیے "#[must_use]" کے نشان والے فنکشنز کی تعداد کو بڑھا دیا ہے، جو کہ کسی فنکشن کو نئی قدر واپس کرنے کے بجائے قدروں کو تبدیل کرنے کی وجہ سے ہونے والی غلطیوں کی نشاندہی کرنے میں مدد کرتا ہے۔
  • API کے ایک نئے حصے کو مستحکم کے زمرے میں منتقل کر دیا گیا ہے، بشمول خصوصیات کے طریقوں اور نفاذ کو مستحکم کیا گیا ہے:
    • میٹا ڈیٹا::is_symlink
    • پاتھ::is_symlink
    • {integer}::saturating_div
    • آپشن:: unwrap_uncheck کیا گیا۔
    • نتیجہ:: unwrap_unchecked
    • نتیجہ::unwrap_err_unchecked
  • "const" وصف، جو مستقل کی بجائے اسے کسی بھی سیاق و سباق میں استعمال کرنے کے امکان کا تعین کرتا ہے، افعال میں استعمال ہوتا ہے:
    • دورانیہ::نیا
    • دورانیہ:: checked_add
    • دورانیہ:: saturating_add
    • دورانیہ::checked_sub
    • دورانیہ:: saturating_sub
    • دورانیہ::checked_mul
    • دورانیہ:: saturating_mul
    • دورانیہ::checked_div
  • "const" سیاق و سباق میں "*const T" پوائنٹرز کی ڈیریفرنسنگ کی اجازت ہے۔
  • کارگو پیکیج مینیجر میں، rust_version فیلڈ کو پیکیج میٹا ڈیٹا میں شامل کیا گیا ہے، اور "--message-format" آپشن کو "cargo install" کمانڈ میں شامل کیا گیا ہے۔
  • کمپائلر CFI (کنٹرول فلو انٹیگریٹی) کے تحفظ کے طریقہ کار کے لیے سپورٹ کو لاگو کرتا ہے، جو ہر بالواسطہ کال سے پہلے غیر متعینہ رویے کی کچھ شکلوں کا پتہ لگانے کے لیے چیک کا اضافہ کرتا ہے جو ممکنہ طور پر عام عمل درآمد کے حکم (کنٹرول فلو) کی خلاف ورزی کا باعث بن سکتا ہے۔ کارناموں کا استعمال جو فنکشنز پر میموری میں محفوظ پوائنٹرز کو تبدیل کرتا ہے۔
  • کمپائلر نے LLVM کوریج موازنہ فارمیٹ کے ورژن 5 اور 6 کے لیے سپورٹ شامل کیا ہے، جو ٹیسٹنگ کے دوران کوڈ کوریج کا اندازہ کرنے کے لیے استعمال کیا جاتا ہے۔
  • کمپائلر میں، LLVM کے کم از کم ورژن کی ضروریات کو LLVM 12 تک بڑھا دیا گیا ہے۔
  • x86_64-unknown-none پلیٹ فارم کے لیے سپورٹ کی تیسری سطح کو نافذ کر دیا گیا ہے۔ تیسرے درجے میں بنیادی مدد شامل ہے، لیکن خودکار جانچ کے بغیر، آفیشل بلڈ کو شائع کرنا، یا یہ چیک کرنا کہ آیا کوڈ بنایا جا سکتا ہے۔

مزید برآں، ہم مائیکروسافٹ کی طرف سے ونڈوز 0.30 لائبریریوں کے لیے Rust کی ریلیز کی اشاعت کو نوٹ کر سکتے ہیں، جو آپ کو Windows OS کے لیے ایپلی کیشنز تیار کرنے کے لیے Rust زبان کا استعمال کرنے کی اجازت دیتی ہے۔ سیٹ میں دو کریٹ پیکجز (ونڈوز اور ونڈوز sys) شامل ہیں، جن کے ذریعے آپ Rust پروگراموں میں Win API تک رسائی حاصل کر سکتے ہیں۔ API سپورٹ کے لیے کوڈ متحرک طور پر API کو بیان کرنے والے میٹا ڈیٹا سے تیار کیا جاتا ہے، جو آپ کو نہ صرف موجودہ Win API کالز کے لیے بلکہ مستقبل میں ظاہر ہونے والی کالوں کے لیے بھی سپورٹ نافذ کرنے کی اجازت دیتا ہے۔ نیا ورژن UWP (یونیورسل ونڈوز پلیٹ فارم) ٹارگٹ پلیٹ فارم کے لیے سپورٹ شامل کرتا ہے اور ہینڈل اور ڈیبگ کی اقسام کو لاگو کرتا ہے۔

ماخذ: opennet.ru

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