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

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

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

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

  • تم القضاء عليها منذ فترة طويلة خلل عند إجراء التحويلات بين الأعداد الصحيحة وأرقام الفاصلة العائمة. نظرًا لأن مترجم Rust يستخدم LLVM كواجهة خلفية، فقد تم إجراء عمليات تحويل النوع من خلال تعليمات التعليمات البرمجية المتوسطة لـ LLVM مثل: com.fptoui، والتي لها ميزة واحدة مهمة - السلوك غير المحدد إذا كانت القيمة الناتجة لا تتناسب مع النوع المستهدف. على سبيل المثال، عند تحويل القيمة العائمة 300 بالنوع f32 إلى النوع الصحيح u8، تكون النتيجة غير متوقعة وقد تختلف باختلاف الأنظمة. المشكلة هي أن هذه الميزة تظهر في التعليمات البرمجية التي لم يتم وضع علامة "غير آمنة" عليها.

    اعتبارًا من Rust 1.45، يتم تنظيم سلوك تجاوز حجم النوع بشكل صارم، وتتحقق عملية التحويل "as" من التجاوز وتفرض تحويل القيمة إلى الحد الأقصى أو الأدنى لقيمة النوع المستهدف (على سبيل المثال أعلاه، قيمة سيتم تحويل 300 إلى 255). لتعطيل عمليات التحقق هذه، يتم توفير استدعاءات واجهة برمجة التطبيقات الإضافية "{f64, f32}::to_int_unchecked"، والتي تعمل في الوضع غير الآمن.

    فريق التمثيل (x: f32) -> u8 {
    س كما u8
    }

    fn main () {
    دع Too_big = 300.0;
    دع Too_small = -100.0؛
    دع نان = f32::NAN;

    دع س: f32 = 1.0؛
    Let y: u8 = unsafe { x.to_int_unchecked() };

    println!("too_big_casted = {}"، cast(too_big)); // الإخراج 255
    println!("too_small_casted = {}"، cast(too_small)); // الإخراج 0
    println!("not_a_number_casted = {}"، cast(nan)); // الإخراج 0
    }

  • استخدام استقرت وحدات الماكرو الإجرائيةالتعبيرات والقوالب والبيانات الشبيهة بالوظيفة. في السابق، لم يكن من الممكن استدعاء وحدات الماكرو هذه في كل مكان، ولكن فقط في أجزاء معينة من التعليمات البرمجية (كمكالمة منفصلة، ​​غير متشابكة مع تعليمات برمجية أخرى). كان توسيع الطريقة التي يمكن بها استدعاء وحدات الماكرو، على غرار الوظائف، أحد المتطلبات لجعل إطار عمل الويب يعمل رسوم الصاروخ في الإصدارات المستقرة من الصدأ. في السابق، كان تحقيق مرونة إضافية في تحديد المعالجات في Rocket يتطلب تمكين ميزة تجريبية تسمى "proc_macro_hygiene"، وهي غير متوفرة في الإصدارات الثابتة من Rust. تم الآن تضمين هذه الوظيفة في الإصدارات الثابتة للغة.
  • يُسمح باستخدام النطاقات من النوع "char" للتكرار عبر قيم النطاق (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    لـ ch في 'a'..='z' {
    طباعة!("{}"، ch);
    }
    println!(); // سيتم طباعة "abcdefghijklmnopqrstuvwxyz"

  • تم نقل جزء جديد من واجهات برمجة التطبيقات إلى الفئة المستقرة، بما في ذلك المستقرة
    القوس::as_ptr،
    بتري ماب::remove_entry,
    آر سي::as_ptr،
    RC::ضعيف::as_ptr,
    RC::ضعيف::from_raw,
    RC::ضعيف::into_raw,
    شارع::strip_prefix،
    شارع ::strip_suffix،
    مزامنة::ضعيف::as_ptr,
    مزامنة::ضعيف::from_raw,
    مزامنة::ضعيف::in_raw,
    الحرف::UNICODE_VERSION،
    سبان::resolved_at,
    سبان::located_at,
    سبان::mixed_site,
    unix::process::CommandExt::arg0.

  • أضاف المترجم Rustc دعمًا لتجاوز العديد من ميزات النظام الأساسي المستهدف باستخدام علامة "target-feature"، على سبيل المثال، "-C target-feature=+avx2,+fma". تمت إضافة أعلام جديدة أيضًا:
    "force-unwind-tables" لإنشاء جداول استدعاء للاسترخاء، بغض النظر عن استراتيجية معالجة الأعطال؛ "embed-bitcode" للتحكم فيما إذا كان رمز البت LLVM متضمنًا في rlbs التي تم إنشاؤها. يتم تمكين علامة "embed-bitcode" افتراضيًا في Cargo لتحسين وقت الإنشاء واستهلاك مساحة القرص.

  • تم توفير المستوى الثالث من الدعم لمنصات mipsel-sony-psp وthumbv7a-uwp-windows-msvc. يتضمن المستوى الثالث الدعم الأساسي، ولكن بدون الاختبار الآلي ونشر الإصدارات الرسمية.

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

المصدر: opennet.ru

إضافة تعليق