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

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

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

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

  • أضيفت بواسطة دعم القوالب لمطابقة أجزاء من الشرائح (المصفوفات الديناميكية، الشريحة). في السابق، كان مسموحًا بالمطابقات التامة، ولكن من الممكن الآن استخدام البنيات المميزة بـ ".." لتغطية العناصر المتبقية من المصفوفة. على سبيل المثال:

    الجبهة الوطنية فو(كلمات: &[&str]) {
    كلمات المباراة {

    // يتحقق من عناصر البداية للمصفوفة ويتجاهلها
    العناصر التي تتبعهم
    ["مرحبًا"، "العالم"، "!"، ..] => println!("مرحبًا بالعالم!"),

    // يتحقق من العنصرين الأولين "Foo" و"Bar"، والباقي ليس مهمًا
    ["Foo"، "Bar"، ..] => println!("Baz"),

    // تجاهل كل شيء، ولكن العنصر الأخير يجب أن يكون "!".
    [.., “!”] => println!(“!!!”),

    // في شريحة البداية، نقوم بتضمين كل شيء باستثناء العنصر الأخير، الذي يجب أن يكون "z"
    [start @ .., "z"] => println!("يبدأ بـ: {:?}"، ابدأ)،

    // في الشريحة النهائية نضع كل شيء ما عدا العنصر الأول الذي يجب أن يكون "a".
    ["a"، end @ ..] => println!("ينتهي بـ: {:؟}"، end)،

    بقية => برينتلن!("{:?}"، راحة)،
    }
    }

  • تمت إضافة ماكرو جديد "مطابقات!"، والذي يأخذ تعبيرًا ونمطًا كمدخلات، ويعيد "صحيح" إذا كان النمط يطابق التعبير. يمكن للقالب استخدام عمليات "|". و إذا".

    تطابق self.partial_cmp(other) {
    بعض (أقل) => صحيح،
    _ => خطأ،
    }

    يتطابق!(self.partial_cmp(other), Some(Less))

    دع foo = 'f';
    تأكيد!(تطابقات!(foo, 'A'..='Z' | 'a'..='z'));

    دع الشريط = بعض (4)؛
    تأكيد!(matches!(bar, Some(x) if x > 2));

  • يتم عرض رسائل الذعر عند استخدامها بشكل غير صحيح
    الأنواع Option وResult، تعرض الآن أرقام الأسطر مع رابط إلى الكود الذي أجرى المكالمة التي بها مشكلة، بدلاً من روابط إلى الكود الذي ينفذ الاستدعاء في libcore. على سبيل المثال، يؤثر التغيير على الاستدعاءات لإلغاء التغليف والتوقع عبر Option::None، أو يتعطل عند استخدام unwrap_err، وexpect، وexpect_err، والأساليب المشابهة في نوع النتيجة.

  • يوفر مدير حزم Cargo الاستبدال التلقائي لـ "proc_macro crate" في الكتلة "الخارجية" للحزم ذات وحدات الماكرو الإجرائية. يسمح هذا التغيير بتطبيق توجيه "الاستخدام" على وحدات الماكرو الإجرائية دون الحاجة إلى تحديد "extern crate proc_macro;" في التعليمات البرمجية. على سبيل المثال، إذا كان البرنامج يستخدم السطر "use proc_macro::TokenStream;"، فسيظل الكود يعمل الآن إذا تمت إزالة "extern crate proc_macro;" منه.
  • تم توسيع قدرات المكتبة القياسية. في iter::فارغة مضاف دعم الإرسال والمزامنة لأي قيم T.
    رقم التعريف الشخصي للمكالمات::{map_unchecked,map_unchecked_mut} نجت من الاضطرار إلى إرجاع قيمة نوع لتطبيق "الحجم".
    في io::المؤشر مُنفّذ معادل جزئي ومعادل. تحدد السمة "const" إمكانية استخدامها في أي سياق بدلاً من الثوابت، مُطبَّق للتخطيط::طريقة جديدة.

  • تم نقل جزء جديد من واجهة برمجة التطبيقات (API) إلى الفئة الثابتة، بما في ذلك CondVar::wait_while وCondVar::wait_timeout_while المستقرة،
    DebugMap::key، DebugMap::value،
    الإفلات يدوياً::خذ،
    ptr::slice_from_raw_parts_mut وptr::slice_from_raw_parts.

  • لقد تم إهمال طريقة الخطأ::الوصف.
  • توفير دعم المستوى الثاني لمنصات Armv7a-none-eabi وriscv64gc-unknown-linux-gnu. تم توفير الدعم للمكتبة القياسية للنظام الأساسي riscv64gc-unknown-linux-gnu.
    منصات أبل 32 بت تم تخفيض رتبته حتى المستوى الثالث من الدعم، والذي يتضمن الدعم الأساسي، ولكن بدون الاختبار الآلي ونشر الإصدارات الرسمية. يرجع الانخفاض في الدعم إلى أن Apple لم تعد تدعم الأنظمة الأساسية 32 بت.

المصدر: opennet.ru

إضافة تعليق