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

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

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

اہم بدعات:

  • مستحکم "async" فنکشن، async move { ... } بلاک، اور ".await" آپریٹر پر مبنی ایک نیا غیر مطابقت پذیر پروگرامنگ نحو، جس سے ایسے ہینڈلرز کو لکھنا آسان ہو جاتا ہے جو مین کمانڈ فلو کو بلاک نہیں کرتے۔ غیر مطابقت پذیر I/O کے لیے پہلے پیش کردہ API کے مقابلے، async/.await تعمیرات سمجھنے میں آسان، انتہائی پڑھنے کے قابل، اور آپ کو لوپس، مشروط بیانات، اور مستثنیات پر مبنی واقف بہاؤ کنٹرول تکنیکوں کا استعمال کرتے ہوئے پیچیدہ غیر مطابقت پذیر تعاملات کو لاگو کرنے کی اجازت دیتے ہیں۔

    Async-await نحو آپ کو ایسے فنکشنز بنانے کی اجازت دیتا ہے جو ان کے عمل کو روک سکتے ہیں، مرکزی دھاگے پر کنٹرول واپس کر سکتے ہیں، اور پھر وہیں سے عمل درآمد دوبارہ شروع کر سکتے ہیں جہاں سے انہوں نے چھوڑا تھا۔ مثال کے طور پر، I/O پر کارروائی کرتے وقت اس طرح کے وقفے کی ضرورت ہوتی ہے، جس میں ڈیٹا کے اگلے ٹکڑے کے آنے کا انتظار کرتے ہوئے دوسرے کام کیے جا سکتے ہیں۔ "async fn" اور "async move" کے ساتھ بیان کردہ فنکشنز اور بلاکس ایک خاصیت واپس کرتے ہیں مستقبل، جو ایک موخر غیر مطابقت پذیر حسابی نمائندگی کی وضاحت کرتا ہے۔ آپ براہ راست ایک موخر کیلکولیشن شروع کر سکتے ہیں اور ".await" آپریٹر کا استعمال کر کے نتیجہ حاصل کر سکتے ہیں۔ .await کو کال کرنے تک کوئی کارروائی نہیں کی جاتی ہے اور نہ ہی پہلے سے منصوبہ بندی کی جاتی ہے، جس سے پیچیدہ نیسٹڈ تعمیرات بغیر اضافی اوور ہیڈ کے تخلیق کیے جا سکتے ہیں۔

    async fn first_function() -> u32 { .. }
    ...
    مستقبل کی اجازت دیں = پہلا_فنکشن ()؛
    ...
    نتیجہ دیں: u32 = future.await؛

  • مستحکم "#!"بذریعہ اقدام" تمثیلوں میں اور اظہار کے "اگر" سیکشن میں ان متغیرات کے حوالہ جات استعمال کریں۔میل کھاتے ہیں" مثال کے طور پر، اب مندرجہ ذیل تعمیرات کی اجازت ہے:

    fn main() {
    let array: Box<[u8; 4]> = باکس::نیا([1, 2, 3, 4]);

    مماثل صف {
    عدد
    اگر nums.iter().sum::() == 10

    => {
    ڈراپ (نمبر)؛
    }
    _ => ناقابل رسائی!()
    }
    }

  • اشارے کی اجازت ہے۔ صفات فنکشن پیرامیٹرز، بندش، اور فنکشن پوائنٹرز کی وضاحت کرتے وقت۔ مشروط تالیف کے اوصاف (cfg, cfg_attr) جو lint کے ذریعے تشخیص کو کنٹرول کرتے ہیں (اجازت، وارننگ، انکار اور منع کرتے ہیں) اور معاون میکرو کالنگ اوصاف معاون ہیں۔

    ایف این لین (
    #[cfg(windows)] سلائس: &[u16], // ونڈوز پر پیرامیٹر استعمال کریں
    #[cfg(not(windows))] سلائس: &[u8]، // دوسرے OS میں استعمال کریں
    ) -> استعمال کریں {
    slice.len()
    }

  • این ایل ایل (نان لیکسیکل لائف ٹائمز) تکنیک کا استعمال کرتے ہوئے متغیرات (قرض کی جانچ کرنے والے) کے ادھار کی جانچ کرتے وقت شناخت ہونے والے مسائل کے بارے میں انتباہات، ترجمہ مہلک غلطیوں کے زمرے میں۔ ہمیں یاد کرنا چاہیے کہ قرضے لیے گئے متغیرات کی زندگی بھر کو مدنظر رکھنے کے لیے ایک نئے طریقہ کار پر مبنی تصدیقی نظام نے کچھ ایسے مسائل کی نشاندہی کرنا ممکن بنایا جن پر پرانے تصدیقی کوڈ کا دھیان نہیں گیا۔ چونکہ اس طرح کے چیک کے لیے خرابی کی پیداوار پہلے کام کرنے والے کوڈ کے ساتھ مطابقت کو متاثر کر سکتی ہے، اس لیے ابتدائی طور پر غلطیوں کی بجائے وارننگز جاری کیے گئے تھے۔ رسٹ 2018 موڈ میں چلتے وقت انتباہات کو اب غلطیوں سے بدل دیا گیا ہے۔ اگلی ریلیز میں، ایرر آؤٹ پٹ کو Rust 2015 موڈ میں بھی لاگو کیا جائے گا، جس سے آخر کار پرانے قرض کی جانچ پڑتال سے نجات مل جائے گی۔
  • "const" وصف، جو مستقل کی بجائے کسی بھی سیاق و سباق میں استعمال کرنے کے امکان کا تعین کرتا ہے، فنکشنز Vec::new، String::new، LinkedList::new، str::len، [T]::len کے لیے استعمال ہوتا ہے۔ str::as_bytes،
    abs، wrapping_abs اور overflowing_abs؛

  • APIs کے ایک نئے حصے کو مستحکم زمرے میں منتقل کر دیا گیا ہے، بشمول وہ طریقے جو مستحکم کیے گئے ہیں۔
    Pin::into_inner، Instant::checked_duration_since اور Instant::saturating_duration_since؛

  • کارگو پیکیج مینیجر کے پاس اب کنفیگریشن فائلوں کے لیے ".toml" ایکسٹینشن استعمال کرنے کی صلاحیت ہے۔ کارگو سے براہ راست معیاری لائبریری کی تعمیر کے لیے ابتدائی مدد شامل کی گئی۔ متنازعہ "--all" جھنڈے کی جگہ لے کر، "--workspace" جھنڈا شامل کیا گیا۔ میٹا ڈیٹا میں ایک نیا فیلڈ شامل کیا گیا ہے "شائع"، جو آپ کو گٹ ٹیگ اور ورژن نمبر بتا کر انحصار شائع کرنے کی اجازت دیتا ہے۔ تالیف کے مختلف مراحل پر عمل درآمد کے اوقات کی HTML رپورٹ تیار کرنے کے لیے ٹیسٹ آپشن "-Ztimings" کو شامل کیا گیا۔
  • rustc کمپائلر میں، تشخیصی پیغامات میں کوڈ کی دموں کو تراشنا شامل ہے جو ٹرمینل میں فٹ نہیں ہوتا ہے۔ ٹارگٹ پلیٹ فارمز کے لیے تیسرے درجے کی سپورٹ فراہم کی۔
    i686-unknown-uefi اور sparc64-unknown-openbsd۔ تیسرے درجے میں بنیادی مدد شامل ہے، لیکن خودکار جانچ اور سرکاری عمارتوں کی اشاعت کے بغیر۔

ماخذ: opennet.ru

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