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

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

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

Reference چیکنگ، آبجیکٹ کی ملکیت پر نظر رکھنے، آبجیکٹ کے لائف ٹائم (اسکوپس) کا ٹریک رکھنے اور کوڈ پر عمل درآمد کے دوران میموری تک رسائی کی درستگی کا اندازہ لگانے کے ذریعے رسٹ میں میموری کی حفاظت فراہم کی جاتی ہے۔ زنگ انٹیجر اوور فلو کے خلاف بھی تحفظ فراہم کرتا ہے، استعمال سے پہلے متغیر اقدار کی لازمی ابتداء کی ضرورت ہوتی ہے، معیاری لائبریری میں غلطیوں کو بہتر طریقے سے ہینڈل کرتا ہے، غیر متغیر حوالہ جات اور متغیرات کے تصور کو بطور ڈیفالٹ لاگو کرتا ہے، منطقی غلطیوں کو کم کرنے کے لیے مضبوط جامد ٹائپنگ پیش کرتا ہے۔

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

  • کمپائلر، کارگو پیکیج مینیجر اور libstd معیاری لائبریری میں لینکس ماحول کی ضروریات میں اضافہ کیا گیا ہے - Glibc کے لیے کم از کم تقاضوں کو ورژن 2.11 سے 2.17 تک، اور لینکس کرنل کو ورژن 2.6.32 سے 3.2 تک بڑھا دیا گیا ہے۔ پابندیاں Libstd کے ساتھ بنائے گئے Rust ایپلیکیشن ایگزیکیوٹیبلز پر بھی لاگو ہوتی ہیں۔ ڈسٹری بیوشن کٹس RHEL 7، SLES 12-SP5، Debian 8 اور Ubuntu 14.04 نئی ضروریات کو پورا کرتی ہیں۔ RHEL 6، SLES 11-SP4، Debian 7 اور Ubuntu 12.04 کے لیے سپورٹ بند کر دی جائے گی۔ وہ صارفین جو پرانے لینکس کرنل کے ساتھ ماحول میں Rust-but executables کا استعمال کرتے ہیں ان کی حوصلہ افزائی کی جاتی ہے کہ وہ اپنے سسٹمز کو اپ گریڈ کریں، کمپائلر کی پرانی ریلیز پر رہیں، یا مطابقت کو برقرار رکھنے کے لیے تہوں کے ساتھ اپنے libstd فورک کو برقرار رکھیں۔

    پرانے لینکس سسٹم کے لیے سپورٹ ختم کرنے کی وجوہات میں پرانے ماحول کے ساتھ مطابقت برقرار رکھنے کے لیے محدود وسائل ہیں۔ LLVM اور کراس کمپائلیشن یوٹیلیٹیز میں ورژن کی بڑھتی ہوئی ضروریات کے پیش نظر، لیگیسی Glibc کے لیے سپورٹ کے لیے لیگیسی ٹولنگ کے استعمال کی ضرورت ہوتی ہے جب ایک مسلسل انٹیگریشن سسٹم میں چیک کیا جاتا ہے۔ کرنل ورژن کی ضروریات میں اضافہ libstd میں نئے سسٹم کالز کو استعمال کرنے کی صلاحیت کی وجہ سے ہے پرانے کرنل کے ساتھ مطابقت کو یقینی بنانے کے لیے تہوں کو برقرار رکھنے کی ضرورت کے بغیر۔

  • IntoFuture خاصیت کو مستحکم کر دیا گیا ہے، جو IntoIterator سے ملتا جلتا ہے، لیکن "for... in ..." loops کے بجائے ".await" استعمال کر کے مؤخر الذکر سے مختلف ہے۔ جب IntoFuture کے ساتھ ملایا جائے تو، ".await" کلیدی لفظ نہ صرف مستقبل کی خاصیت کی توقع کر سکتا ہے، بلکہ کسی بھی دوسری قسم کی بھی توقع کر سکتا ہے جسے مستقبل میں تبدیل کیا جا سکتا ہے۔
  • زنگ کا تجزیہ کرنے والی یوٹیلیٹی رسٹ ریلیز کے ساتھ فراہم کردہ افادیت کے مجموعہ میں شامل ہے۔ یہ افادیت رسٹ اپ (رسٹ اپ اجزاء شامل کریں رسٹ اینالائزر) کا استعمال کرتے ہوئے انسٹالیشن کے لیے بھی دستیاب ہے۔
  • کارگو پیکیج مینیجر میں ورک اسپیس وراثت شامل ہے تاکہ پیکجوں کے درمیان عام فیلڈ ویلیوز کی نقل کو ختم کیا جا سکے، جیسے کہ رسٹ ورژن اور ریپوزٹری یو آر ایل۔ ایک ساتھ کئی ٹارگٹ پلیٹ فارمز کی تعمیر کے لیے سپورٹ بھی شامل کیا (اب آپ "--target" آپشن میں ایک سے زیادہ پیرامیٹر بتا سکتے ہیں)۔
  • API کے ایک نئے حصے کو مستحکم کے زمرے میں منتقل کر دیا گیا ہے، بشمول خصوصیات کے طریقوں اور نفاذ کو مستحکم کیا گیا ہے:
    • مستقبل :: مستقبل میں
    • num::NonZero*::checked_mul
    • num::NonZero*::checked_pow
    • num::NonZero*::saturating_mul
    • num::NonZero*::saturating_pow
    • num::NonZeroI*::abs
    • num::NonZeroI*::checked_abs
    • num::NonZeroI*::overflowing_abs
    • num::NonZeroI*::saturating_abs
    • num::NonZeroI*::unsigned_abs
    • num::NonZeroI*::wrapping_abs
    • num::NonZeroU*::checked_add
    • num::NonZeroU*::checked_next_power_of_two
    • num::NonZeroU*::saturating_add
    • os::unix::process::CommandExt::process_group
    • os::windows::fs::FileTypeExt::is_symlink_dir
    • os::windows::fs::FileTypeExt::is_symlink_file
  • سی-مطابقت والی قسمیں، جو پہلے std::ffi ماڈیول میں مستحکم تھیں، کو کور اور ایلوک لائبریری میں شامل کر دیا گیا ہے:
    • core::ffi::CStr
    • core::ffi::FromBytesWithNulError
    • alloc::ffi::CSstring
    • alloc::ffi::FromVecWithNulError
    • alloc::ffi::IntoStringError
    • alloc::ffi::NulError
  • std::os::raw ماڈیول میں پہلے سے مستحکم C قسموں کو core::ffi اور std::ffi ماڈیولز میں شامل کیا گیا ہے (مثال کے طور پر، c_uint اور c_ulong کی قسمیں uint اور ulong C اقسام کے لیے تجویز کی گئی ہیں):
    • ffi::c_char
    • ffi::c_double
    • ffi::c_float
    • ffi::c_int
    • ffi::c_long
    • ffi::c_longlong
    • ffi::c_schar
    • ffi::c_short
    • ffi::c_uchar
    • ffi::c_uint
    • ffi::c_ulong
    • ffi::c_ulonglong
    • ffi::c_ushort
  • نچلے درجے کے ہینڈلرز کو پول میکانزم کے ساتھ استعمال کے لیے مستحکم کر دیا گیا ہے (مستقبل میں ایک آسان API فراہم کرنے کا منصوبہ بنایا گیا ہے جس کے لیے کم سطح کے ڈھانچے جیسے کہ پل اور پن کے استعمال کی ضرورت نہیں ہے):

    • مستقبل::پول_ایف این
    • کام::تیار!
  • "const" وصف، جو مستقل کے بجائے کسی بھی سیاق و سباق میں استعمال کرنے کے امکان کا تعین کرتا ہے، slice::from_raw_parts فنکشن میں استعمال ہوتا ہے۔
  • ڈیٹا کو زیادہ درست طریقے سے ذخیرہ کرنے کے لیے، Ipv4Addr، Ipv6Addr، SocketAddrV4 اور SocketAddrV6 ڈھانچے کا میموری لے آؤٹ تبدیل کر دیا گیا ہے۔ سنگل کریٹ پیکجز کے ساتھ مطابقت کا مسئلہ ہو سکتا ہے جو std::mem::transmute استعمال کرتے ہیں ڈھانچے کی کم سطح کی ہیرا پھیری کے لیے۔
  • ونڈوز پلیٹ فارم کے لیے زنگ کمپائلر کی تعمیر میں پی جی او آپٹیمائزیشن (پروفائل گائیڈڈ آپٹیمائزیشن) کا استعمال کیا گیا ہے، جس نے کوڈ کمپلیشن کی کارکردگی میں 10-20 فیصد اضافہ ممکن بنایا ہے۔
  • کمپائلر نے کچھ ڈھانچے میں غیر استعمال شدہ فیلڈز کے بارے میں ایک نئی وارننگ نافذ کی ہے۔

مزید برآں، آپ رسٹ لینگویج کمپائلر کے متبادل نفاذ کی ترقی کے بارے میں اسٹیٹس رپورٹ کو نوٹ کر سکتے ہیں، جسے جی سی سی آر ایس پروجیکٹ (جی سی سی رسٹ) نے تیار کیا ہے اور جی سی سی میں شمولیت کے لیے منظور کیا گیا ہے۔ فرنٹ اینڈ کو انضمام کرنے کے بعد، معیاری GCC ٹولز کا استعمال Rustc کمپائلر کو انسٹال کرنے کی ضرورت کے بغیر رسٹ لینگویج میں پروگراموں کو مرتب کرنے کے لیے کیا جا سکتا ہے، جو LLVM ڈیولپمنٹس کا استعمال کرتے ہوئے بنایا گیا ہے۔ جب تک ترقی ٹریک پر ہے، اور کسی بھی غیر متوقع مسائل کو چھوڑ کر، رسٹ فرنٹ اینڈ کو اگلے سال مئی میں شیڈول GCC 13 ریلیز میں ضم کر دیا جائے گا۔ Rust کا GCC 13 عمل درآمد بیٹا اسٹیٹس میں ہوگا، ابھی تک ڈیفالٹ کے ذریعے فعال نہیں کیا گیا ہے۔

ماخذ: opennet.ru

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