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

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

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

اہم بدعات:

  • کارگو پیکیج مینیجر نے متبادل پیکیج رجسٹریوں کے ساتھ کام کرنے کے لیے ٹولز شامل کیے ہیں جو crates.io پبلک رجسٹری کے ساتھ ساتھ رہ سکتے ہیں۔ مثال کے طور پر، ملکیتی ایپلی کیشنز کے ڈویلپرز اب اپنی ذاتی رجسٹری استعمال کر سکتے ہیں، جسے Cargo.toml میں انحصار کی فہرست میں استعمال کرتے وقت استعمال کیا جا سکتا ہے، اور اپنی مصنوعات کے لیے crates.io کی طرح ایک ورژننگ ماڈل لاگو کر سکتے ہیں، نیز دونوں کریٹس پر انحصار کا حوالہ دے سکتے ہیں۔ io اور آپ کی اپنی رجسٹری میں۔

    .cargo/config میں بیرونی رجسٹریاں شامل کرنے کے لیے ($HOME میں یا پیکیج ڈائرکٹری میں واقع)
    فراہم کی سیکشن "[رجسٹریاں]"، اور بیرونی رجسٹری استعمال کرنے کے لیے، "رجسٹری" کا اختیار Cargo.toml میں ہر انحصار کی تفصیل میں ظاہر ہوا ہے۔ ایک اضافی رجسٹری سے جڑنے کے لیے، بس تصدیقی ٹوکن کو ~/.cargo/credentials فائل میں رکھیں اور کمانڈ چلائیں۔
    "کارگو لاگ ان --registry=my-registry" اور ایک پیکج شائع کرنے کے لیے -
    "cargo publish -registry=my-registry"؛

  • "؟" آپریٹر کو استعمال کرنے کے لیے مکمل تعاون شامل کیا گیا۔ ٹیسٹوں میں doctests، آپ کو دستاویزات سے مثال کے کوڈ کو بطور ٹیسٹ استعمال کرنے کی اجازت دیتا ہے۔ پہلے آپریٹر
    "؟" صرف "fn main()" فنکشن کی موجودگی میں یا "#[test]" فنکشنز میں ٹیسٹ کے عمل کے دوران غلطیوں کو سنبھالنے کے لیے استعمال کیا جا سکتا ہے۔

  • طریقہ کار میکرو کا استعمال کرتے ہوئے وضاحت کردہ حسب ضرورت صفات میں محفوظ ٹوکنز کے صوابدیدی سیٹ استعمال کرنے کی صلاحیت ("#[attr($tokens)]"، "#[attr[$tokens]] اور #[attr{$tokens}]")۔ پہلے، عناصر کو سٹرنگ لٹریلز کا استعمال کرتے ہوئے صرف درخت/ تکراری شکل میں بیان کیا جا سکتا تھا، مثال کے طور پر "#[foo(bar, baz(quux, foo = "bar"))]"، لیکن اب گنتی استعمال کرنا ممکن ہے (' #[رینج(0. .10)]') اور تعمیرات جیسے "#[bound(T: MyTrait)]"؛
  • مستحکم اقسام (خاصیت) TryFrom и TryInto، غلطی سے نمٹنے کے ساتھ قسم کے تبادلوں کی اجازت دیتا ہے۔ مثال کے طور پر، انٹیجر اقسام کے ساتھ from_be_bytes جیسے طریقے ان پٹ کے طور پر arrays کا استعمال کرتے ہیں، لیکن ڈیٹا اکثر Slice قسم میں آتا ہے، اور arrays اور slices کے درمیان تبدیل کرنا دستی طور پر کرنا مشکل ہوتا ہے۔ نئی خصوصیات کی مدد سے، مخصوص آپریشن .try_into() پر کال کے ذریعے فلائی پر انجام دیا جا سکتا ہے، مثال کے طور پر، "let num = u32::from_be_bytes(slice.try_into()?)"۔ ہمیشہ کامیاب ہونے والے تبادلوں کے لیے (مثال کے طور پر u8 سے u32 تک)، ایک غلطی کی قسم شامل کی گئی ہے۔ عیب۔، شفاف استعمال کی اجازت دیتا ہے۔
    "From" کے تمام موجودہ نفاذ کے لیے TryFrom؛

  • فنکشن کو فرسودہ کر دیا گیا ہے۔ CommandExt::before_exec، جس نے ایک ہینڈلر کو exec چلانے سے پہلے پھانسی دینے کی اجازت دی تھی، جسے fork() کال کے بعد چائلڈ پروسیس کے تناظر میں عمل میں لایا گیا تھا۔ اس طرح کے حالات میں، پیرنٹ پروسیس کے کچھ وسائل، جیسے فائل ڈسکرپٹرز اور میپڈ میموری ایریاز کو ڈپلیکیٹ کیا جا سکتا ہے، جو لائبریریوں کے غیر متعینہ رویے اور غلط آپریشن کا باعث بن سکتا ہے۔
    پہلے_exec کے بجائے غیر محفوظ فنکشن استعمال کرنے کی سفارش کی جاتی ہے۔ CommandExt::pre_exec.

  • مستحکم دستخط شدہ اور غیر دستخط شدہ ایٹم انٹیجر کی قسمیں جن کا سائز 8 سے 64 بٹ تک ہے (مثال کے طور پر، اٹامک یو 8) کے ساتھ ساتھ دستخط شدہ اقسام غیر زیرو[8|16|32|64|128].
  • API کے ایک نئے حصے کو مستحکم زمرہ میں منتقل کر دیا گیا ہے، بشمول Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] اور SystemTime طریقوں کو مستحکم کر دیا گیا ہے ::checked_[add|sub]۔ iter::from_fn اور iter::sucessors فنکشنز کو مستحکم کر دیا گیا ہے۔
  • تمام عددی اقسام کے لیے، checked_pow، saturating_pow، wrapping_pow اور overflowing_pow کے طریقے نافذ کیے جاتے ہیں۔
  • "-C linker-plugin-lto" کی تعمیر کے آپشن کی وضاحت کرکے لنکنگ مرحلے پر اصلاح کو فعال کرنے کی صلاحیت کو شامل کیا گیا۔

ماخذ: opennet.ru

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