إصدار لغة البرمجة Rust 1.34

تم إطلاق لغة برمجة النظام Rust 1.34 التي طورها مشروع Mozilla. تركز اللغة على سلامة الذاكرة، وتوفر إدارة تلقائية للذاكرة، وتوفر وسيلة لتحقيق التوازي العالي للمهام دون استخدام أداة تجميع البيانات المهملة أو وقت التشغيل.

تحرر إدارة الذاكرة التلقائية في Rust المطور من معالجة المؤشر وتحمي من المشكلات الناشئة عن معالجة الذاكرة ذات المستوى المنخفض، مثل الوصول إلى الذاكرة بعد التحرر، وإلغاء مرجعيات المؤشر الفارغة، وتجاوزات المخزن المؤقت، وما شابه. لتوزيع المكتبات وضمان التجميع وإدارة التبعيات، يقوم المشروع بتطوير مدير حزم Cargo، والذي يسمح لك بالحصول على المكتبات اللازمة للبرنامج بنقرة واحدة. مستودع صناديق.io مدعوم لاستضافة المكتبات.

الابتكارات الرئيسية:

  • أضاف مدير حزم Cargo أدوات للعمل مع سجلات الحزم البديلة التي يمكن أن تتواجد مع السجل العام لـcrats.io. على سبيل المثال، يمكن لمطوري التطبيقات الاحتكارية الآن استخدام السجل الخاص بهم، والذي يمكن استخدامه عند إدراج التبعيات في Cargo.toml، وتطبيق نموذج إصدار مشابه لـcrats.io لمنتجاتهم، بالإضافة إلى إحالة التبعيات إلى كلا الصندوقين. io وإلى السجل الخاص بك.

    لإضافة تسجيل خارجي إلى ~/.cargo/config
    تم توفير خيار جديد "السجل الخاص بي" في قسم "[السجلات]"، وتمت إضافة خيار "الصندوق الآخر" لذكر السجل الخارجي في التبعيات في Cargo.toml في قسم "[التبعيات]". للاتصال بسجل إضافي، ما عليك سوى وضع رمز المصادقة المميز في ملف ~/.cargo/credentials وتشغيل الأمر
    "تسجيل دخول البضائع --registry=my-registry" ونشر الحزمة -
    "نشر البضائع -registry=my-registry";

  • تمت إضافة الدعم الكامل لاستخدام عامل التشغيل "؟". في doctests، والتي تسمح لك باستخدام نموذج التعليمات البرمجية من الوثائق كاختبارات. المشغل سابقا
    "؟" يمكن استخدامه لمعالجة الأخطاء أثناء تنفيذ الاختبار فقط في حالة وجود وظيفة "fn main()" أو في وظائف "#[test]"؛

  • في السمات المخصصة المحددة باستخدام وحدات الماكرو الإجرائية، من الممكن استخدام مجموعات عشوائية من الرموز المميزة ("#[attr($tokens)]"، "#[attr[$tokens]] و #[attr{$tokens}]") . في السابق، كان من الممكن تحديد العناصر فقط في شكل شجرة/متكرر باستخدام سلسلة حرفية، على سبيل المثال "#[foo(bar, baz(quux, foo = "bar")]"، ولكن الآن أصبح من الممكن استخدام التعدادات (' #[range(0..10)]') وإنشاءات مثل "#[bound(T: MyTrait)]";
  • تم تثبيت سمات TryFrom وTryInto، مما يسمح بتحويلات الكتابة مع معالجة الأخطاء. على سبيل المثال، تستخدم أساليب مثل from_be_bytes ذات الأنواع الصحيحة المصفوفات كمدخلات، ولكن البيانات غالبًا ما تأتي في نوع Slice، كما أن التحويل بين المصفوفات والشرائح يمثل مشكلة عند القيام به يدويًا. بمساعدة السمات الجديدة، يمكن تنفيذ العملية المحددة بسرعة من خلال استدعاء .try_into()، على سبيل المثال، "let num = u32::from_be_bytes(slice.try_into()?)". بالنسبة للتحويلات التي تنجح دائمًا (على سبيل المثال، من النوع u8 إلى u32)، تمت إضافة نوع خطأ معصوم للسماح بالاستخدام الشفاف لـ
    TryFrom لجميع التطبيقات الموجودة لـ "من"؛

  • تم إهمال وظيفة CommandExt::before_exec، التي سمحت بتنفيذ معالج قبل تنفيذ exec في سياق عملية فرعية متشعبة بعد استدعاء fork(). في ظل هذه الظروف، قد يتم تكرار بعض موارد العملية الأصلية، مثل واصفات الملفات ومناطق الذاكرة المعينة، مما قد يؤدي إلى سلوك غير محدد وتشغيل غير صحيح للمكتبات.
    بدلاً من before_exec، يوصى باستخدام الوظيفة غير الآمنة CommandExt::pre_exec.

  • أنواع الأعداد الصحيحة الذرية الموقعة وغير الموقعة المستقرة التي يتراوح حجمها من 8 إلى 64 بت (على سبيل المثال، AtomicU8)، بالإضافة إلى الأنواع الموقعة NonZeroI[8|16|32|54|128].
  • تم نقل جزء جديد من واجهة برمجة التطبيقات (API) إلى الفئة الثابتة، بما في ذلك Any::type_id, Error::type_id,lice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] وتم تثبيت أساليب SystemTime ::checked_[add|sub]. تم تثبيت وظائف iter::from_fn وiter::successors؛
  • بالنسبة لجميع أنواع الأعداد الصحيحة، يتم تنفيذ الطرق check_pow، وsaturating_pow، و Wrapping_pow، و overflowing_pow؛
  • تمت إضافة القدرة على تمكين التحسينات في مرحلة الارتباط عن طريق تحديد خيار البناء "-C linker-plugin-lto" (يقوم Rustc بتجميع كود Rust في كود بت LLVM، مما يسمح بتطبيق تحسينات LTO).

المصدر: opennet.ru

إضافة تعليق