صدر الصدأ 1.82. متصفح جديد يعتمد على Rust. استخدام الصدأ في فولفو

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

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

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

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

  • تمت إضافة أمر "info" إلى مدير حزمة الشحن لعرض معلومات حول الحزمة في المستودع.
  • تمت إضافة دعم لبناء جملة "use<..>" في "impl Trait"، والذي يحدد معلومات حول الأنواع المخفية. على سبيل المثال، يحدد "impl Trait + use<'x, T>" أنه يُسمح فقط باستخدام المعلمات "x" و"T" في النوع المخفي.
  • تم اقتراح بناء جملة منفصل لإنشاء مؤشرات أولية، لتحل محل وحدات الماكرو المستخدمة مسبقًا: تم استبدال الماكرو "addr_of!(expr)" بعامل التشغيل "&raw const expr"، وتم استبدال الماكرو "addr_of_mut!(expr)" بواسطة عامل التشغيل "&raw mut" expr". البنية معبأة { not_aligned_field: i32، } fn main() { Let p = Packed { not_aligned_field: 1_82 }; // الطريقة القديمة لإنشاء مؤشر خام Let ptr = std::ptr::addr_of!(p.not_aligned_field); // طريقة جديدة لإنشاء مؤشر خام Let ptr = &raw const p.not_aligned_field; Let val = unsafe { ptr.read_unaligned() }; }
  • أصبح من الممكن الآن تحديد وظائف وثوابت آمنة ذات عمر "ثابت" داخل الكتل الخارجية باستخدام السمة "غير الآمنة" (في السابق، كان من الممكن أن تحتوي جميع العناصر في "الخارجية غير الآمنة" على السمة "غير الآمنة" فقط): unsafe extern { pub TAU ثابت آمن: f64؛ حانة آمنة fn sqrt(x: f64) -> f64; pub unsafe fn strlen(p: *const u8) -> use; }
  • تعتبر سمات no_mangle وlink_section وexport_name، التي يمكن أن تؤدي إلى سلوك غير محدد، غير آمنة الآن وتتطلب علامة "غير آمنة" صريحة، على سبيل المثال: #[unsafe(no_mangle)] pub fn my_global_function() { }
  • تتيح مطابقة الأنماط تخطي الأنواع الفارغة، مثل "enum Void {}" أو الهياكل التي تحتوي على حقل فارغ مرئي. استخدم std::convert::Infallible; حانة fn unwrap_without_panic (خ: النتيجة ) -> T { Let Ok(x) = x; // يمكن تخطي "خطأ" x }
  • تتميز أنواع أرقام الفاصلة العائمة (f32 وf64) بسلوك موحد عند معالجة قيم NaN غير الرقمية (0.0/0.0)، وتسمح أيضًا باستخدام عمليات الفاصلة العائمة في const fn.
  • توفر إدراجات التجميع القدرة على استخدام المعاملات مع السمة "const" لاستخدام القيم الرقمية الصحيحة مباشرة دون تخزينها أولاً في السجل. const MSG: &str = "مرحبًا بالعالم!\n"; غير آمن { core::arch::asm!( "mov rdx, {LEN} // سيتم إنشاء التعليمات 'mov rdx, 14''"، LEN = const MSG.len(), … ); }
  • يُسمح بمعالجة التعبيرات ذات السمة "static" في سياق آمن دون تحديد كتلة غير آمنة (لا يؤثر عامل التشغيل "&raw mut" و"&raw const" على قيمة المعامل ويقومان فقط بإنشاء مؤشر إليه): static mut STATIC_MUT: النوع = النوع::new( ); خارجي "C" { EXTERN_STATIC ثابت: النوع؛ } fn main() { Let static_mut_ptr = &raw mut STATIC_MUT; دع extern_static_ptr = &raw const EXTERN_STATIC; }
  • تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
    • std::thread::Builder::spawn_unchecked
    • std::str::CharIndices::offset
    • std::option::Option::is_none_or
    • [T]::is_sorted
    • [T]::is_sorted_by
    • [T]::is_sorted_by_key
    • التكرار::is_sorted
    • التكرار::is_sorted_by
    • التكرار::is_sorted_by_key
    • الأمراض المنقولة جنسيا::المستقبل::جاهز::into_inner
    • الأمراض المنقولة جنسيا::iter::repeat_n
    • ضمناً DoubleEndedIterator لـ Take

      المصدر: opennet.ru

إضافة تعليق