إطلاق لغة البرمجة Rust 1.74. تدقيق RustVMM. إعادة كتابة بيندر في الصدأ

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

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

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

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

  • تمت إضافة القدرة على تكوين عمليات فحص الوبر عبر ملف Cargo.toml مع بيان مدير الحزم. لتحديد إعدادات الوبر، مثل مستوى الاستجابة (منع، رفض، تحذير، السماح)، يتم اقتراح أقسام جديدة "[lints]" و"[workspace.lints]"، والتي يتم أخذ التغييرات فيها بعين الاعتبار عند اتخاذ قرار بشأن إعادة البناء. على سبيل المثال، بدلاً من تحديد العلامات "-F" و"-D" و"-W" و"-A" عند تجميع أو إضافة "#![forbid(unsafe_code)]" و"#![deny(clippy) :" سمات الكود) :enum_glob_use)]" يمكن استخدامها الآن في بيان الشحن: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
  • أضاف مدير حزم Crate القدرة على المصادقة عند الاتصال بمستودع ما. يتضمن التوزيع الأساسي دعمًا لوضع معلمات المصادقة في مخازن بيانات اعتماد Linux (استنادًا إلى libsecret)، وmacOS (Keychain)، وWindows (Windows Credential Manager)، ولكن تم إنشاء النظام في البداية بشكل معياري ويسمح لك بتنظيم العمل مع موفري خدمات مختلفين للتخزين والبيانات. إنشاء الرموز المميزة، على سبيل المثال، تم إعداد مكون إضافي لاستخدام مدير كلمات المرور 1Password. قد يطلب المستودع المصادقة لأي عملية، وليس فقط للتأكد من نشر الحزم. ~/.cargo/config.toml [registry] global-credential-providers = ["cargo:token"، "cargo:libsecret"]
  • تم تثبيت دعم إسقاطات نوع الإرجاع (impl_trait_projections)، مما يسمح بذكر Self وT::Assoc في أنواع الإرجاع مثل "async fn" و"->impl Trait". struct Wrapper<'a, T>(&'a T); // أنواع الإرجاع غير الشفافة التي تشير إلى `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } سمة السمات<'a> { type Assoc; fn new() -> Self::Assoc; } سمة ضمنية<'_> for () { type Assoc = (); fn new() {} } // أنواع الإرجاع غير الشفافة التي تشير إلى نوع مرتبط: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterator { /* … */ } }
  • تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
  • تُستخدم خاصية "const" ، التي تحدد إمكانية استخدامها في أي سياق بدلاً من الثوابت ، في الدوال:
    • الأساسية::mem::transmute_copy
    • str::is_ascii
    • [u8]::is_ascii
    • الأساسية::الأعداد::التشبع
    • ضمنا من ل std::process::Stdio
    • ضمنا من ل std::process::Stdio
    • ضمنية من لـ std::process::Child{Stdin, Stdout, Stderr}
    • ضمنية من لـ std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • الأمراض المنقولة جنسيا::io::خطأ::أخرى
    • ضمني TryFrom لu16
    • ضمنا من <&[ت؛ N]>لـ Vec
    • ضمنا من <&موت [T؛ N]>لـ Vec
    • ضمنا من <[ت؛ N]> للقوس<[T]>
    • ضمنا من <[ت؛ N]> لـ Rc<[T]>
  • أدى المترجم ومجموعة الأدوات والمكتبة القياسية والملفات التنفيذية للتطبيقات التي تم إنشاؤها إلى زيادة متطلبات منصات Apple، والتي تتطلب الآن على الأقل macOS 10.12 Sierra وiOS 10 وtvOS 10 التي تم إصدارها في عام 2016 للتشغيل.
  • تم تنفيذ المستوى الثالث من الدعم للنظام الأساسي i686-pc-windows-gnullvm. يتضمن المستوى الثالث الدعم الأساسي، ولكن بدون اختبار تلقائي أو نشر إصدارات رسمية أو التحقق من إمكانية إنشاء التعليمات البرمجية.
  • تم تنفيذ المستوى الثاني من الدعم للنظام الأساسي المستهدف loongarch64-unknown-none. المستوى الثاني من الدعم يتضمن ضمان التجميع.

بالإضافة إلى ذلك، يمكن ملاحظة حدثين متعلقين بلغة روست:

  • نشر OSTIF (صندوق تحسين التكنولوجيا مفتوحة المصدر)، الذي تم إنشاؤه لتعزيز أمان المشاريع مفتوحة المصدر، نتائج تدقيق مشروع RustVMM، الذي يوفر مكونات لإنشاء برامج مراقبة افتراضية خاصة بالمهام وأجهزة مراقبة الآلة الافتراضية (VMMs). وتشارك في تطوير المشروع شركات مثل Intel وAlibaba وAmazon وGoogle وLinaro وRed Hat. يتم تطوير برامج Hypervisor Intel Cloud Hypervisor وDragonball استنادًا إلى RustVMM. وأكدت عملية التدقيق الجودة العالية لقاعدة التعليمات البرمجية واستخدام التقنيات في التصميم والتنفيذ بهدف تحقيق أقصى قدر من الأمان. خلال التدقيق تم تحديد 6 مشاكل ليس لها تأثير مباشر على السلامة.
  • قدمت Google تطبيقًا جديدًا لآلية الاتصال بين العمليات Binder، والتي تمت إعادة كتابتها بلغة Rust، إلى القائمة البريدية لمطوري Linux kernel. تم إجراء إعادة العمل كجزء من مشروع لتعزيز الأمان وتعزيز تقنيات البرمجة الآمنة وزيادة كفاءة تحديد المشكلات عند العمل مع الذاكرة في Android (حوالي 70٪ من جميع نقاط الضعف الخطيرة التي تم تحديدها في Android ناتجة عن أخطاء عند العمل مع الذاكرة ). حقق تطبيق Binder in Rust تكافؤًا في الوظائف مع الإصدار الأصلي بلغة C، واجتاز جميع اختبارات AOSP (مشروع Android مفتوح المصدر) ويمكن استخدامه لإنشاء إصدارات عمل من البرامج الثابتة. أداء كلا التطبيقين على نفس المستوى تقريبًا (الانحرافات ضمن -1.96% و+1.38%).

المصدر: opennet.ru

إضافة تعليق