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

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

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

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

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

    لإضافة سجلات خارجية إلى .cargo/config (الموجود في $HOME أو في دليل الحزمة)
    متاح قسم "[السجلات]"، ولاستخدام سجل خارجي، ظهر خيار "السجل" في وصف كل تبعية في 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)]";
  • الأنواع المستقرة (السمة) حاول من и تريينتو، مما يسمح بتحويلات النوع مع معالجة الأخطاء. على سبيل المثال، تستخدم أساليب مثل 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 بت (على سبيل المثال، الذريةU8)، وكذلك الأنواع الموقعة غير صفرI[8|16|32|64|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".

المصدر: opennet.ru

إضافة تعليق