صدرت لغة البرمجة Rust 1.89، التي أسسها مشروع موزيلا، والتي طُوّرت الآن برعاية مؤسسة Rust المستقلة غير الربحية. تُركّز اللغة على سلامة الذاكرة، وتوفر أدوات لتحقيق توازي عالٍ في تنفيذ المهام، دون الحاجة إلى جامع القمامة أو وقت التشغيل (حيث يقتصر وقت التشغيل على التهيئة الأساسية وصيانة المكتبة القياسية).
تعمل طرق معالجة ذاكرة Rust على حفظ المطور من الأخطاء عند معالجة المؤشرات والحماية من المشكلات التي تنشأ بسبب معالجة الذاكرة منخفضة المستوى ، مثل الوصول إلى منطقة الذاكرة بعد تحريرها ، وإلغاء الإشارة إلى المؤشرات الفارغة ، وتجاوزات المخزن المؤقت ، وما إلى ذلك. لتوزيع المكتبات وتوفير عمليات الإنشاء وإدارة التبعيات ، يقوم المشروع بتطوير مدير حزمة الشحن. يتم دعم مستودع crates.io لاستضافة المكتبات.
يتم توفير أمان الذاكرة في Rust في وقت التجميع من خلال التحقق من المرجع ، وتتبع ملكية الكائن ، وتتبع عمر الكائن (النطاقات) ، وتقييم صحة الوصول إلى الذاكرة أثناء تنفيذ التعليمات البرمجية. يوفر Rust أيضًا حماية ضد فيض الأعداد الصحيحة ، ويتطلب تهيئة إلزامية للقيم المتغيرة قبل الاستخدام ، ويعالج الأخطاء بشكل أفضل في المكتبة القياسية ، ويطبق مفهوم المراجع والمتغيرات الثابتة افتراضيًا ، ويوفر كتابة ثابتة قوية لتقليل الأخطاء المنطقية.
الابتكارات الرئيسية:
- تم توفير القدرة على استخدام الرمز "_" كحجة للمعلمات العامة مع العلم "const" لاستنتاج قيم هذه المعلمات استنادًا إلى السياق المحيط. pub fn all_false () -> [بول؛ لين] { [خطأ؛ _] }
- أُضيف تحذير جديد من نوع "lint" بعنوان "mismatched_lifetime_syntaxes" لحل مشكلة عدم وضوح تعريف عمر الدالة في تواقيع الدالة عند استخدام آلية "حذف عمر الدالة" (يحدد هذا التحذير عمر المراجع تلقائيًا، مما يتيح لك الاستغناء عن تحديده يدويًا). يتحقق التحذير من أن معلمات الإدخال والإخراج للدالة تنتمي إلى مجموعة النوع نفسها. تُشكل المجموعات بناءً على دعم تحديد عمر الدالة الصريح وإمكانية استنتاج عمر الدالة تلقائيًا بواسطة المُجمِّع (على سبيل المثال، في النوعين "&'a T" و"ContainsLifetime<'a>"، قد يكون عمر الدالة موجودًا صراحةً، ولكن لا يمكن للمُجمِّع تحديده تلقائيًا، بينما في الأنواع "&T" و"&'_ T" و"ContainsLifetime<'_>"، يُسمح بكل من التحديد الصريح والتحديد التلقائي).
- تُطبّق سمة "target_feature" لأنظمة x86 القدرة على التحقق من دعم مجموعات التعليمات الموسعة sha512 وsm3 وsm4 وkl وwidekl، بالإضافة إلى ميزات avx512 الفردية. #[target_feature(enable = "avx512bw")] pub fn cool_simd_code(/* .. */) -> /* … */ { /* … */ }
- تم التأكد من تشغيل doctest (الاختبارات المضمنة في الوثائق) ليس فقط لمنصة الهدف الحالية، ولكن أيضًا للأنظمة الأساسية الأخرى المحددة عند تشغيل مدير الحزم "cargo" ("cargo test --doc --target other_target").
- بالنسبة لوظائف "extern "C"" عند البناء للهدف "wasm32-unknown-unknown"، يتم تنفيذ واجهة ABI القياسية C لـ WebAssembly.
- مع بعض التحذيرات فيما يتعلق بتوافق النوع، يُسمح الآن باستخدام أنواع i128 وu128 في وظائف C الخارجية (extern "C")، والتي كانت تنتج في السابق تحذير lint "improper_ctypes_definitions".
- تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
- العديد من المكونات الداخلية للمترجم لمعالجات x86، بما في ذلك الوظائف الخاصة بـ AVX512، وSHA512، وSM3، وSM4.
- غير صفر
- ملف::قفل
- ملف::قفل_مشترك
- ملف::try_lock
- ملف::try_lock_shared
- ملف::فتح
- غير فارغ::من_المرجع
- غير فارغ::من_mut
- غير فارغ::بدون_منشأ
- غير فارغ::مع_منشأ_مكشوف
- غير فارغ::منشأ التعرض
- OsString::تسرب
- PathBuf::leak
- النتيجة::تسطيح
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
يتم استخدام علامة "const" في الوظائف:
- <[T; N]>::as_mut_slice
- <[u8]>::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- بدأت عملية نقل منصة "x86_64-apple-darwin" المستهدفة من مستوى الدعم الأول إلى الثاني (تخطط Apple لإيقاف دعم بنية x86_64). يتضمن مستوى الدعم الأول إنشاء تجميعات ثنائية، وإجراء اختبارات شاملة، وتوفير أعلى ضمان لدعم المنصة - حيث يتم التحقق من كل تغيير في المُجمِّع من خلال تشغيل مجموعة اختبار كاملة. يتضمن مستوى الدعم الثاني ضمان التجميع، ولكن لا توجد ضمانات عند اجتياز مجموعة الاختبار.
- تم تطبيق المستوى الثالث من الدعم لمنصتي "loongarch32-unknown-none" و"loongarch32-unknown-none-softfloat". يتضمن هذا المستوى دعمًا أساسيًا، ولكن دون اختبار آلي، ونشر نسخ رسمية، والتحقق من إمكانية بناء الشيفرة البرمجية.
بالإضافة إلى ذلك، يمكننا تسليط الضوء على بعض الأحداث والمشاريع المتعلقة بـ Rust:
- نُشر تقرير عن حالة حزم Rust في دبيان. يُلاحظ أنه في فرع Debian Unstable (Sid)، ترتبط حوالي 8% من حزم src في المستودع الرئيسي بتبعيات بناء حزمة "librust-*" واحدة على الأقل. في دبيان 12، بلغت هذه النسبة 4.5%. كما يُلاحظ أن أكثر من 3 آلاف حزمة تتضمن شيفرة Rust، منقولة إلى حزم librust-..-dev، وأن 150 حزمة src تُوفر ملفات تنفيذية مُجمّعة أو مكتبات Rust.
تشمل الحزم المهمة لتوزيعة ديبيان: sudo-rs، وntpd-rs، وuutils، وSequoia، وrpgp، وhickory (DNS)، وRustls، وrav1d، وfish. يتوفر دعم Rust اختياريًا في APT، وQEMU (virtiofsd)، ونواة لينكس، وMesa، ومن المتوقع توفره في LibreOffice. كما يتوفر أيضًا برنامج debcargo لتحويل حزم crate إلى حزم src من ديبيان.
- تم تقديم مشروع tmux-rs، الذي يقوم بتطوير نسخة من مضاعف محطة tmux (مدير نافذة وحدة التحكم)، وتمت إعادة كتابته من C إلى Rust.
- قام مطور برنامج التشغيل Tyr من Collabora بنشر مقالة حول بنية برامج تشغيل وحدة معالجة الرسومات على مستوى النواة ومبادئ تطوير مثل هذه البرامج في لغة Rust.
- تم توضيح تطبيق عالمي في Rust، قادر على التشغيل على كل من وحدة المعالجة المركزية وعلى منصات وحدة معالجة الرسومات المختلفة: CUDA لـ NVIDIA، وSPIR-V لوحدات معالجة الرسومات الممكّنة بواسطة Vulkan، وMetal لـ Apple، وDirectX 12 لنظام Windows، وWebGPU للمتصفحات.
المصدر: opennet.ru
