تم نشر إصدار لغة البرمجة للأغراض العامة Rust 1.63 ، التي أسسها مشروع Mozilla ، ولكن تم تطويرها الآن تحت رعاية منظمة Rust Foundation المستقلة غير الربحية. تركز اللغة على أمان الذاكرة وتوفر الوسائل لتحقيق توازي وظيفي عالي مع تجنب استخدام أداة تجميع البيانات المهملة ووقت التشغيل (يتم تقليل وقت التشغيل إلى التهيئة الأساسية للمكتبة القياسية وصيانتها).
تعمل طرق معالجة ذاكرة Rust على حفظ المطور من الأخطاء عند معالجة المؤشرات والحماية من المشكلات التي تنشأ بسبب معالجة الذاكرة منخفضة المستوى ، مثل الوصول إلى منطقة الذاكرة بعد تحريرها ، وإلغاء الإشارة إلى المؤشرات الفارغة ، وتجاوزات المخزن المؤقت ، وما إلى ذلك. لتوزيع المكتبات وتوفير عمليات الإنشاء وإدارة التبعيات ، يقوم المشروع بتطوير مدير حزمة الشحن. يتم دعم مستودع crates.io لاستضافة المكتبات.
يتم توفير أمان الذاكرة في Rust في وقت التجميع من خلال التحقق من المرجع ، وتتبع ملكية الكائن ، وتتبع عمر الكائن (النطاقات) ، وتقييم صحة الوصول إلى الذاكرة أثناء تنفيذ التعليمات البرمجية. يوفر Rust أيضًا حماية ضد فيض الأعداد الصحيحة ، ويتطلب تهيئة إلزامية للقيم المتغيرة قبل الاستخدام ، ويعالج الأخطاء بشكل أفضل في المكتبة القياسية ، ويطبق مفهوم المراجع والمتغيرات الثابتة افتراضيًا ، ويوفر كتابة ثابتة قوية لتقليل الأخطاء المنطقية.
الابتكارات الرئيسية:
- تمت إضافة واجهة برمجة التطبيقات std::thread::scope، والتي تتيح لك إنشاء سلاسل رسائل محددة النطاق. على عكس سلاسل الرسائل المتوفرة مسبقًا، تسمح واجهة برمجة التطبيقات std::thread::scope الجديدة بتمرير استعارة البيانات غير الثابتة، في حين أن سلاسل الرسائل التي تم إنشاؤها باستخدام واجهة برمجة التطبيقات الكلاسيكية std::thread::spawn كانت مطلوبة لامتلاك جميع الوسائط التي تم تمريرها ولم تتمكن من تلقيها المتغيرات المقترضة تضمن واجهة برمجة التطبيقات std::thread::scope إنهاء أي سلاسل رسائل تم إنشاؤها قبل إرجاع البيانات، مما يوفر أمانًا مناسبًا لآلية الاقتراض.
- تم اقتراح أنواع جديدة من أدوات التغليف لواصفات الملفات - BorrowedFd وOwnedFd، والتي توفر الاقتراض والملكية. يتم وضع علامة على الأنواع بـ "#[repr(transparent)]"، مما يسمح باستخدامها مباشرة في روابط C الخارجية بطريقة تراعي الملكية.
- توفير القدرة على استدعاء Condvar::new وMutex::new وRwLock::new في سياق الثوابت لإنشاء قيم Mutex وRwLock وCondvar الثابتة العالمية دون استخدام حزم Lazy_static.
- لوظائف مثل fn foo (القيمة: T، f: نسخة ضمنية) يُسمح باستخدام صيغة مثل "foo::". (32، 3)" يشير صراحة إلى نوع العموم.
- تم الانتهاء من الانتقال إلى استخدام تقنية NLL (أزمنة الحياة غير المعجمية) لتحديد المشكلات المتعلقة بمتغيرات الاقتراض. يأخذ NLL في الاعتبار على مستوى مجموعة من المؤشرات في الرسم البياني لتدفق التنفيذ، مما يجعل من الممكن زيادة جودة التحقق من متغيرات الاقتراض (مدقق الاقتراض) والسماح بتنفيذ بعض أنواع التعليمات البرمجية الصحيحة، واستخدام مما أدى في السابق إلى خطأ. لقد تمت الآن إزالة دعم الآلية القديمة التي كانت تستخدم الارتباط مدى الحياة على المستوى المعجمي بالكامل من Rustc، وتم تنفيذ استخدام NLL الجديد طوال الوقت.
- تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
- صفيف::from_fn
- المربع::into_pin
- BinaryHeap::try_reserve
- BinaryHeap::try_reserve_exact
- OsString::try_reserve
- OsString::try_reserve_exact
- PathBuf::try_reserve
- PathBuf::try_reserve_exact
- المسار::try_exists
- المرجع::filter_map
- RefMut::filter_map
- NonNull::<[T]>::len
- ToOwned::clone_into
- Ipv6Addr::to_ipv4_mapped
- يونيكس::io::AsFd
- unix::io::BorrowedFd<'fd>
- يونكس::io::OwnedFd
- windows::io::AsHandle
- windows::io::BorrowedHandle
المصدر: opennet.ru
