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

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

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

اہم بدعات:

  • ایک پائپ لائنڈ کمپلیشن موڈ (پائپ لائنڈ) شامل کیا گیا، جس میں انحصار میٹا ڈیٹا کے دستیاب ہوتے ہی ایک منحصر کریٹ پیکج کی تعمیر شروع ہو جاتی ہے، اس کے تالیف مکمل ہونے کا انتظار کیے بغیر۔ پیکج کو مرتب کرتے وقت، انحصار کو مکمل طور پر جمع کرنے کی ضرورت نہیں ہوتی، صرف میٹا ڈیٹا کی وضاحت کرتے ہوئے، جس میں اقسام، انحصار، اور برآمد شدہ عناصر کی فہرستیں شامل ہوتی ہیں۔ میٹا ڈیٹا کو تالیف کے عمل میں ابتدائی طور پر دستیاب کرایا جاتا ہے، لہذا منسلک پیکجوں کو اب بہت پہلے مرتب کیا جا سکتا ہے۔ سنگل پیکجز بناتے وقت، مجوزہ موڈ کارکردگی کو متاثر نہیں کرتا، لیکن اگر بلڈ برانچڈ انحصار والے پیکجوں کا احاطہ کرتا ہے، تو مجموعی طور پر تعمیر کا وقت 10-20% تک کم کیا جا سکتا ہے۔
  • افعال کے غلط استعمال کا پتہ لگانے کو یقینی بناتا ہے۔ std::mem::غیر شروع и std::mem::zeroed. مثال کے طور پر، std::mem::uninitialized تیزی سے صفوں کو بنانے کے لیے آسان ہے، لیکن یہ کمپائلر کو گمراہ کرتا ہے کیونکہ بظاہر یہ شروع ہوتا ہے، لیکن حقیقت میں قدر غیر شروع ہی رہتی ہے۔ میم::غیر شروع شدہ فنکشن کو پہلے ہی فرسودہ کے بطور نشان زد کیا گیا ہے اور اس کی بجائے انٹرمیڈیٹ قسم استعمال کرنے کی سفارش کی جاتی ہے۔ شاید یونٹ. جہاں تک mem::zeroed کا تعلق ہے، یہ فنکشن ان اقسام کے ساتھ مسائل پیدا کر سکتا ہے جو صفر کی قدروں کو قبول نہیں کر سکتیں۔

    غیر متعینہ رویے کی شناخت میں مدد کے لیے، نئی ریلیز کمپائلر میں ایک لِنٹ چیک کا اضافہ کرتی ہے جو mem::uninitialized یا mem::zeroed کے ساتھ کچھ مسائل کا پتہ لگاتی ہے۔ مثال کے طور پر، اب آپ کو mem::uninitialized یا mem::zeroed اقسام &T اور Box‹T› کے ساتھ استعمال کرنے کی کوشش کرتے وقت ایک خرابی آتی ہے، جو پوائنٹر آبجیکٹ کی نمائندگی کرتی ہے جو کہ null اقدار کو قبول نہیں کر سکتیں۔

  • "#[فرسودہ]" وصف کو بڑھا دیا گیا ہے تاکہ کریٹ پیکجوں کو متروک کے طور پر نشان زد کیا جا سکے اور مستقبل میں حذف کرنے کے لیے شیڈول کیا جا سکے۔ Rust 1.38 کے مطابق، یہ وصف میکروز کے لیے بھی استعمال کیا جا سکتا ہے۔
  • ذیلی ماڈلز میں "#[global_allocator]" وصف کو استعمال کرنے کی صلاحیت شامل کی گئی۔
  • فنکشن شامل کیا گیا۔ std::any::type_name، جو آپ کو اس قسم کا نام معلوم کرنے کی اجازت دیتا ہے، جو ڈیبگنگ کے مقاصد کے لیے مفید ہو سکتا ہے۔ مثال کے طور پر، پروگرام کے عمل کے دوران آپ یہ جان سکتے ہیں کہ فنکشن کو کس قسم کے لیے کہا گیا تھا:

    fn gen_value‹T: Default>() -> T {
    println!("{} کی ایک مثال شروع کرنا", std::any::type_name::‹T›());
    ڈیفالٹ:: ڈیفالٹ()
    }

    fn main() {
    let _: i32 = gen_value(); # "i32" پرنٹ کیا جائے گا۔
    let _: String = gen_value(); # پرنٹ کرے گا "alloc::string::String"
    }

  • معیاری لائبریری کے توسیعی افعال:
    • slice::{concat, connect, join} اب &T; کے علاوہ قدر &[T] بھی لے سکتا ہے۔
    • "*const T" اور "*mut T" اب لاگو کریں مارکر::Unpin؛
    • "Arc‹[T]›" اور "Rc‹[T]›" اب FromIterator‹T› کو نافذ کریں؛
    • iter::{StepBy, Peekable, Take} اب DoubleEndedIterator کو لاگو کریں۔
    • ascii::EscapeDefault کلون اور ڈسپلے کو نافذ کرتا ہے۔
  • APIs کے ایک نئے حصے کو مستحکم زمرے میں منتقل کر دیا گیا ہے، بشمول وہ طریقے جو مستحکم کیے گئے ہیں۔
    • ‹*const T›::cast، ‹*mut T›::cast،
    • دورانیہ::as_secs_f{32|64}،
    • دورانیہ::div_duration_f{32|64}،
    • دورانیہ::div_f{32|64}،
    • دورانیہ::from_secs_f{32|64}،
    • دورانیہ::mul_f{32|64}،
    • بقیہ کے ساتھ ڈویژن آپریشنز
      div_euclid اور rem_euclid تمام انٹیجر پرائمیٹوز کے لیے؛

  • کارگو پیکج مینیجر اب مختلف خصوصیات کو فعال کرنے کے لیے "--خصوصیات" اختیار کی متعدد بار وضاحت کرنے کی حمایت کرتا ہے۔
  • مرتب کرنے والا تیسرا فراہم کرتا ہے۔ سطح ٹارگٹ پلیٹ فارمز کے لیے سپورٹ -gnueabi، armv64-unknown-linux-musleabi، hexagon-unknown-linux-musl اور riscv686i-unknown-none-elf۔ تیسرے درجے میں بنیادی مدد شامل ہے، لیکن خودکار جانچ اور سرکاری عمارتوں کی اشاعت کے بغیر۔

ماخذ: opennet.ru

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