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

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

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

اہم بدعات:

  • انتساب کا استعمال کرتے ہوئے ڈھانچے (سٹرکچر) اور شماریات (ویریئنٹ بلاک کے ساتھ enum) کو نشان زد کرنے کی صلاحیت شامل کی گئی۔#[غیر_مکمل]"، کونسا کی اجازت دیتا ہے مستقبل میں، اعلان کردہ ڈھانچے اور شماریات میں نئے فیلڈز اور اختیارات شامل کریں۔ مثال کے طور پر، ایسے ماڈیولز کے ڈویلپرز جن کے ڈھانچے عوامی طور پر اعلان کردہ فیلڈز کے ساتھ ہیں وہ ان ڈھانچے کو نشان زد کرنے کے لیے "#[non_exhaustive]" استعمال کر سکتے ہیں جن میں مستقبل میں نئے فیلڈز شامل کیے جا سکتے ہیں۔ اب تک، اس صورت حال میں، ڈویلپر کو نجی طور پر فیلڈز کا اعلان کرنے اور فیلڈز کی غیر تبدیل شدہ فہرست کے پابند ہونے کے درمیان انتخاب کرنے پر مجبور کیا گیا تھا۔ نیا وصف اس حد کو ہٹاتا ہے اور آپ کو پہلے سے مرتب کردہ بیرونی کوڈ کو توڑنے کے خطرے کے بغیر مستقبل میں نئے فیلڈز شامل کرنے کی اجازت دیتا ہے۔ کریٹ پیکجوں میں، جب "میچ" سیکشن میں آپشنز کو ملایا جائے تو، "_ => {...}" ماسک کی ایک واضح تعریف درکار ہوتی ہے، جس میں مستقبل کے ممکنہ فیلڈز کا احاطہ کیا جاتا ہے، بصورت دیگر نئے فیلڈز شامل کرتے وقت ایک خرابی ظاہر ہوگی۔
  • شامل کیا گیا۔ ایک قسم کے سیاق و سباق میں طریقہ کار میکرو mac!() کو کال کرنے کی صلاحیت۔ مثال کے طور پر، اب آپ لکھ سکتے ہیں "type Foo = expand_to_type!(bar);" اگر "expand_to_type" ایک پروسیجرل میکرو ہے۔
  • "بیرونی { ... }" بلاکس میں شامل کیا طریقہ کار اور انتساب والے میکروز کو استعمال کرنے کی صلاحیت، بشمول "bang!()" میکرو، مثال کے طور پر:

    macro_rules! make_item { ($name:ident) => { fn $name(); } }

    بیرونی {
    make_item!(alpha);
    make_item!(beta);
    }

    بیرونی "C" {
    #[میری_شناخت_میکرو] fn foo()؛
    }

  • میکروز میں لاگو کیا "macro_rules!" عناصر پیدا کرنے کی صلاحیت۔ "macro_rules!" تیار کر رہا ہے! فنکشن جیسے میکروز ("mac!()") اور میکروز میں صفات ("#[mac]") کی شکل میں دونوں ممکن ہے۔
  • $m:میٹا میپنگ عنصر میں شامل کیا صوابدیدی ٹوکن کی گنتی کی قدروں ("[TOKEN_STREAM]"، "{TOKEN_STREAM}" اور "(TOKEN_STREAM)" کے لیے سپورٹ، مثال کے طور پر:

    macro_rules! accept_meta { ($m:meta) => {} }
    accept_meta!( my::path);
    accept_meta!( my::path = "lit" );
    accept_meta!( my::path ( a b c ) );
    accept_meta!( my::path [ a b c ] );
    accept_meta!( my::path { a b c } );

  • رسٹ 2015 موڈ میں، این ایل ایل (نان لیکسیکل لائف ٹائمز) تکنیک کا استعمال کرتے ہوئے متغیرات کے قرض لینے کی جانچ کرتے وقت شناخت شدہ مسائل کے لیے ایرر آؤٹ پٹ کو فعال کیا جاتا ہے۔ پہلے، رسٹ 2018 موڈ میں چلتے وقت انتباہات کو غلطیوں سے بدل دیا جاتا تھا۔
    تبدیلی کو زنگ 2015 موڈ تک بڑھایا جانے کے بعد، ڈویلپرز آخر کار اس قابل ہو گئے۔ نجات پانا پرانے ادھار چیکر سے

    ہمیں یاد کرنا چاہیے کہ قرضے لیے گئے متغیرات کی زندگی بھر کو مدنظر رکھنے کے لیے ایک نئے طریقہ کار پر مبنی تصدیقی نظام نے کچھ ایسے مسائل کی نشاندہی کرنا ممکن بنایا جن پر پرانے تصدیقی کوڈ کا دھیان نہیں گیا۔ چونکہ اس طرح کے چیک کے لیے خرابی کی پیداوار پہلے کام کرنے والے کوڈ کے ساتھ مطابقت کو متاثر کر سکتی ہے، اس لیے ابتدائی طور پر غلطیوں کی بجائے وارننگز جاری کیے گئے تھے۔

  • "const" وصف، جو مستقل کی بجائے کسی بھی سیاق و سباق میں استعمال کرنے کے امکان کا تعین کرتا ہے، is_power_of_two فنکشن (غیر دستخط شدہ عدد کے لیے) کے لیے استعمال ہوتا ہے۔
  • API کے ایک نئے حصے کو مستحکم زمرہ میں منتقل کر دیا گیا ہے، بشمول todo!() macro اور slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value، طریقوں کو مستحکم کر دیا گیا ہے۔
    آپشن::as_deref، Option::as_deref_mut، Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_f32, f64}::from_be_bytes، {f32,f64}::from_le_bytes، اور {f32,f64}::from_ne_bytes۔

  • پیکیج مینیجر کارگو میں
    لاگو کیا ڈسک پر کیشنگ کمپائلر وارننگز۔ "کارگو میٹا ڈیٹا" کمانڈ میں "کارگو میٹا ڈیٹا" کا اختیار شامل کیا گیا۔--فلٹر پلیٹ فارمانحصار ریزولوشن کالم میں صرف مخصوص ٹارگٹ پلیٹ فارم کے پابند پیکیجز کو دکھانے کے لیے۔ درست TLS ورژن کی وضاحت کرنے کے لیے http.ssl-version کنفیگریشن کا اختیار شامل کیا گیا۔
    سیکشن کو شائع کرنے کی اہلیت شامل کی گئی "دیو انحصار"ورژن" کلید کی وضاحت کیے بغیر۔

  • rustc کمپائلر ٹارگٹ پلیٹ فارمز thumbv7neon-unknown-linux-musleabihf، aarch64-unknown-none-softfloat، mips64-unknown-linux-muslabi64 اور mips64el-unknown-linux-muslabi64 کے لیے تیسرے درجے کی مدد فراہم کرتا ہے۔ تیسرے درجے میں بنیادی مدد شامل ہے، لیکن خودکار جانچ اور سرکاری عمارتوں کی اشاعت کے بغیر۔

ماخذ: opennet.ru

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