صدرت لغة البرمجة Rust 1.99، التي أسسها مشروع موزيلا، والتي طُوّرت الآن برعاية مؤسسة Rust المستقلة غير الربحية. تُركّز اللغة على سلامة الذاكرة، وتوفر أدوات لتحقيق توازي عالٍ في تنفيذ المهام، دون الحاجة إلى جامع القمامة أو وقت التشغيل (حيث يقتصر وقت التشغيل على التهيئة الأساسية وصيانة المكتبة القياسية).
صُممت أساليب إدارة الذاكرة في لغة Rust للقضاء على أخطاء معالجة المؤشرات والحماية من المشكلات الناجمة عن إدارة الذاكرة على مستوى منخفض، مثل الوصول إلى الذاكرة بعد تحريرها، وفك مرجعية المؤشرات الفارغة، وتجاوز سعة المخزن المؤقت، وما إلى ذلك. ويعمل المشروع على تطوير مدير الحزم Cargo لتوزيع المكتبات، وتسهيل عمليات البناء، وإدارة التبعيات. ويتم صيانة مستودع crates.io لاستضافة المكتبات.
يتم توفير أمان الذاكرة في Rust في وقت التجميع من خلال التحقق من المرجع ، وتتبع ملكية الكائن ، وتتبع عمر الكائن (النطاقات) ، وتقييم صحة الوصول إلى الذاكرة أثناء تنفيذ التعليمات البرمجية. يوفر Rust أيضًا حماية ضد فيض الأعداد الصحيحة ، ويتطلب تهيئة إلزامية للقيم المتغيرة قبل الاستخدام ، ويعالج الأخطاء بشكل أفضل في المكتبة القياسية ، ويطبق مفهوم المراجع والمتغيرات الثابتة افتراضيًا ، ويوفر كتابة ثابتة قوية لتقليل الأخطاء المنطقية.
الابتكارات الرئيسية:
- يُتيح لك Rust الآن إنشاء دوال ذات عدد متغير من الوسائط يتم تصديرها لاستدعائها من مشاريع C (واجهة برمجة تطبيقات C). يمكن أن يكون العنصر الأخير في قائمة الوسائط في هذه الدوال هو البنية "..."، والتي يتم التعامل معها في Rust باستخدام نوع خاص، VaList، والذي يعمل بشكل مشابه لـ va_list في C. مثال: `unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg::` () }; let b = unsafe { args.next_arg:: () }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
- تم تثبيت وظائف Layout::for_value_raw و mem::size_of_val_raw و mem::align_of_val_raw للسماح بتحديد حجم ومحاذاة المؤشرات الخام بشكل آمن، بما في ذلك عند استخدام أنواع ذات أحجام ديناميكية مثل الشرائح، دون الحاجة إلى إنشاء مراجع بيانات.
- توصي الوثائق الآن بتجنب تحرير الذاكرة التي تمت الإشارة إليها بشكل ثابت بعمر غير محدد (و'static') عبر استدعاء Box::leak (إلغاء التسريب ذهابًا وإيابًا)، حيث قد يؤدي هذا الإجراء إلى مشاكل بسبب عدم التوافق مع تحسينات المُصرّف المستقبلية وآليات تخصيص الذاكرة القابلة للتوصيل. بدلًا من إنشاء مرجع ثابت لنقل الملكية المؤقتة، يُنصح باستخدام المؤشرات الخام، على سبيل المثال، عبر استدعاء Box::into_non_null.
- تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
- IntoIterator for Box<[T; N]>
- IntoIterator for &Box<[T; N]>
- IntoIterator for &mut Box<[T; N]>
- VecDeque::retain_back
- core::ffi::VaList
- Box::into_non_null
- Box::from_non_null
- Vec::into_parts
- Vec::from_parts
- core::mem::size_of_val_raw
- core::mem::align_of_val_raw
- core::alloc::Layout::for_value_raw
- String::from_utf8_lossy_owned
- string::FromUtf8Error::into_utf8_lossy
- FusedIterator لـ StepBy
- std::fs::set_times
- std::fs::set_times_nofollow
- يتضمن مدير حزم Cargo الآن ملف تعريف "debug" مدمجًا جديدًا، مشابهًا لملف تعريف "dev" (من المخطط فصل إمكانيات التصحيح والتطوير في المستقبل). يتم تعطيل التجميع التزايدي افتراضيًا عند البناء في بيئة التكامل المستمر.
- تم نقل منصة riscv64-unknown-linux-musl المستهدفة لدعم المستوى 2، والذي يوفر ضمانًا للبناء ولكن لا يوفر ضمانًا لاجتياز مجموعة الاختبارات.
بالإضافة إلى ذلك، نود تسليط الضوء على المشاريع والفعاليات التي تم الإعلان عنها مؤخرًا والمتعلقة بلغة Rust:
- رفعت مايكروسوفت مستوى لغة Rust إلى المستوى الأول، وستوفر لها دعمًا كاملاً في جميع مراحل التطوير داخل الشركة. وكان الدعم من المستوى الأول مُتاحًا سابقًا للغات C++ وC# وTypeScript. وتُستخدم Rust حاليًا في أكثر من 100 مستودع من مستودعات مايكروسوفت. ومن بين استخداماتها الأخرى، تُستخدم مكونات Rust في منتجات مثل Microsoft 365 وCopilot، كما طُوِّرت واجهة خلفية مخصصة لـ Rust، تُسمى rustc_codegen_utc، تعتمد على مُصرِّف rustc، وذلك لمُصرِّف MSVC.
تُشير مايكروسوفت إلى أن الهدف الأساسي من استخدام لغة Rust هو تعزيز أمان التعليمات البرمجية الحساسة. ووفقًا للمدير التقني لشركة مايكروسوفت أزور، فإن حوالي 70% من جميع الثغرات الأمنية في Windows تنتج هذه المشاكل عن مشكلات في إدارة الذاكرة يمكن تجنبها باستخدام لغة Rust.
- قامت جوجل بإزالته من نواة النظام. Linux تم إيقاف استخدام تطبيق Binder IPC القديم، المكتوب بلغة C، لصالح برنامج تشغيل Binder IPC جديد مُعاد كتابته بلغة Rust. تجدر الإشارة إلى أن برنامج التشغيل القديم، على مدار 15 عامًا من وجوده، تراكمت عليه ديون تقنية كبيرة وتعقيدات عديدة، مما أعاق اكتشاف الأخطاء والصيانة وإضافة ميزات جديدة. وقد تم اعتماد برنامج تشغيل Binder IPC المكتوب بلغة Rust كبرنامج التشغيل الرئيسي، ولم يعد يُعتبر تطويرًا تجريبيًا.
- تم إصدار Arti 2.7.0، وهي نسخة مكتوبة بلغة Rust من مجموعة أدوات Tor. وبمجرد أن يصل كود Arti إلى مستوى يسمح له باستبدال نسخة C بالكامل، يعتزم مطورو Tor جعل Arti النسخة الأساسية لـ Tor والتوقف تدريجيًا عن صيانة نسخة C. يتضمن الإصدار الجديد تطويرًا لوظائف أجهزة الترحيل و الخوادم تم تحسين وظائف سلطة الدليل (DA) المتعلقة بتحليل المستندات، ودعم نسخ خادم الدليل، ومعالجة حركة مرور نظام أسماء النطاقات (DNS). كما أُضيفت آلية RPC لإجراء تغييرات وفحوصات التكوين. وتم إصلاح العديد من الثغرات الأمنية، لذا يُنصح مسؤولو خدمة Onion بتحديث أنظمتهم على وجه السرعة.
المصدر: opennet.ru
