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

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

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

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

  • "گھبراہٹ!" میکرو کا استعمال مستحکم کر دیا گیا ہے۔ تالیف کے دوران بنائے گئے سیاق و سباق میں، جیسے "const fn" اعلامیہ۔ مزید برآں، استعمال کرنے کے علاوہ "گھبراہٹ!" const ڈیکلریشنز "اسسٹ!" میکرو کے استعمال کی اجازت دیتے ہیں۔ اور کچھ دیگر معیاری لائبریری APIs۔ استحکام ابھی تک پورے فارمیٹنگ انفراسٹرکچر کا احاطہ نہیں کرتا ہے، لہذا اس کی موجودہ شکل میں "گھبراہٹ!" میکرو صرف جامد تاروں کے ساتھ استعمال کیا جا سکتا ہے (گھبراہٹ!("...")) یا ایک واحد انٹرپولیٹڈ ویلیو "&str" کے ساتھ جب متبادل (گھبراہٹ!("{}", a))، جسے "{" کو تبدیل کرنے تک محدود ہونا چاہیے۔ }" فارمیٹنگ سپیفائیرز اور دیگر اقسام کے بغیر۔ مستقبل میں، مستقل سیاق و سباق میں میکرو کے اطلاق کو بڑھایا جائے گا، لیکن مستحکم صلاحیتیں تالیف کے مرحلے پر اسسٹ _: () = assert!(std::mem::size_of:: پر زور چیک کرنے کے لیے پہلے سے ہی کافی ہیں۔ () == 64)؛ const _: () = assert!(std::mem::size_of:: () == 8);
  • کارگو پیکج مینیجر صوابدیدی ناموں کے ساتھ پروفائلز کے استعمال کی اجازت دیتا ہے، یہ صرف "dev"، "ریلیز"، "ٹیسٹ" اور "بنچ" تک محدود نہیں ہے۔ مثال کے طور پر، لنکنگ سٹیج (LTO) پر آپٹیمائزیشن کو صرف اس وقت فعال کرنے کے لیے جب حتمی پروڈکٹ اسمبلیاں تیار ہو جائیں، آپ Cargo.toml میں ایک "پروڈکشن" پروفائل بنا سکتے ہیں اور اس میں "lto = true" جھنڈا شامل کر سکتے ہیں۔ تاہم، اپنے پروفائلز کی وضاحت کرتے وقت، آپ کو اس سے پہلے سے طے شدہ ترتیبات کو وراثت میں حاصل کرنے کے لیے ایک موجودہ پروفائل کی وضاحت کرنا ہوگی۔ ذیل کی مثال ایک "پروڈکشن" پروفائل بناتی ہے جو "lto = true" پرچم کو شامل کرکے "ریلیز" پروفائل کی تکمیل کرتی ہے۔ پروفائل خود کارگو کو "--profile پروڈکشن" آپشن کے ساتھ کال کرکے چالو کیا جاتا ہے، اور اسمبلی کے نمونے "ٹارگٹ/پروڈکشن" ڈائرکٹری میں رکھے جائیں گے۔ [profile.production] inherits = "ریلیز" lto = سچ
  • Vec، String، HashMap، HashSet اور VecDeque اقسام کے لیے try_reserve کا استعمال مستحکم کر دیا گیا ہے، جو آپ کو کسی مخصوص قسم کے عناصر کے لیے پہلے سے جگہ محفوظ کرنے کی اجازت دیتا ہے تاکہ میموری مختص کرنے کی کارروائیوں کی تعدد کو کم کیا جا سکے۔ یادداشت کی کمی کی وجہ سے آپریشن کے دوران کریش۔
  • اسے "m!{ .. }.method()" اور "m!{ .. }?" جیسے تاثرات میں گھوبگھرالی منحنی خطوط وحدانی کے ساتھ میکرو کی وضاحت کرنے کی اجازت ہے۔
  • فائل::read_to_end اور read_to_string فنکشنز کے نفاذ کو بہتر بنایا گیا ہے۔
  • یونیکوڈ تفصیلات کے لیے سپورٹ کو ورژن 14.0 میں اپ ڈیٹ کر دیا گیا ہے۔
  • ریٹرن ویلیو کو نظر انداز کرنے کی صورت میں انتباہ جاری کرنے کے لیے "#[must_use]" کے نشان والے فنکشنز کی تعداد کو بڑھایا، جو کہ کسی فنکشن کو نئی قدر واپس کرنے کے بجائے قدروں کو تبدیل کرنے کی وجہ سے ہونے والی غلطیوں کی نشاندہی کرنے میں مدد کرتا ہے۔
  • libgccjit کا استعمال کرتے ہوئے کوڈ جنریشن کے لیے تجرباتی بیک اینڈ شامل کیا گیا۔
  • API کے ایک نئے حصے کو مستحکم کے زمرے میں منتقل کر دیا گیا ہے، بشمول خصوصیات کے طریقوں اور نفاذ کو مستحکم کیا گیا ہے:
    • [T; N]:: as_mut_slice
    • [T; N]:: as_slice
    • مجموعہ::TryReserveError
    • HashMap::try_reserve
    • ہیش سیٹ::ٹری_ریزرو
    • String::try_reserve
    • String::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque ::try_reserve
    • VecDeque::try_reserve_exact
    • Iterator::map_while
    • iter::MapWhile
    • proc_macro::is_available
    • کمانڈ::get_program
    • کمانڈ::get_args
    • کمانڈ::get_envs
    • کمانڈ::get_current_dir
    • CommandArgs
    • CommandEnvs
  • "const" وصف، جو اس بات کا تعین کرتا ہے کہ آیا اسے مستقل کی بجائے کسی بھی سیاق و سباق میں استعمال کیا جا سکتا ہے، فنکشن hint::unreachable_unchecked میں استعمال ہوتا ہے۔
  • armv6k-nintendo-3ds، armv7-unknown-linux-uclibceabihf، m68k-unknown-linux-gnu، aarch64-kmc-solid_asp3، armv7a-kmc-solid_asp3-eabi-اور 7-3 کے لیے سپورٹ کی تیسری سطح کو نافذ کیا گیا ہے۔ solid_aspXNUMX-eabihf پلیٹ فارمز۔ تیسرے درجے میں بنیادی مدد شامل ہے، لیکن خودکار جانچ کے بغیر، آفیشل بلڈ کو شائع کرنا، یا یہ چیک کرنا کہ آیا کوڈ بنایا جا سکتا ہے۔

ماخذ: opennet.ru

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