تم نشر إصدار لغة البرمجة للأغراض العامة Rust 1.60 ، التي أسسها مشروع Mozilla ، ولكن تم تطويرها الآن تحت رعاية منظمة Rust Foundation المستقلة غير الربحية. تركز اللغة على أمان الذاكرة وتوفر الوسائل لتحقيق توازي وظيفي عالي مع تجنب استخدام أداة تجميع البيانات المهملة ووقت التشغيل (يتم تقليل وقت التشغيل إلى التهيئة الأساسية للمكتبة القياسية وصيانتها).
تعمل طرق معالجة ذاكرة Rust على حفظ المطور من الأخطاء عند معالجة المؤشرات والحماية من المشكلات التي تنشأ بسبب معالجة الذاكرة منخفضة المستوى ، مثل الوصول إلى منطقة الذاكرة بعد تحريرها ، وإلغاء الإشارة إلى المؤشرات الفارغة ، وتجاوزات المخزن المؤقت ، وما إلى ذلك. لتوزيع المكتبات وتوفير عمليات الإنشاء وإدارة التبعيات ، يقوم المشروع بتطوير مدير حزمة الشحن. يتم دعم مستودع crates.io لاستضافة المكتبات.
يتم توفير أمان الذاكرة في Rust في وقت التجميع من خلال التحقق من المرجع ، وتتبع ملكية الكائن ، وتتبع عمر الكائن (النطاقات) ، وتقييم صحة الوصول إلى الذاكرة أثناء تنفيذ التعليمات البرمجية. يوفر Rust أيضًا حماية ضد فيض الأعداد الصحيحة ، ويتطلب تهيئة إلزامية للقيم المتغيرة قبل الاستخدام ، ويعالج الأخطاء بشكل أفضل في المكتبة القياسية ، ويطبق مفهوم المراجع والمتغيرات الثابتة افتراضيًا ، ويوفر كتابة ثابتة قوية لتقليل الأخطاء المنطقية.
الابتكارات الرئيسية:
- يحتوي مُجمِّع rustc على نظام مُستقر قائم على LLVM لتوليد بيانات التغطية، والتي تُستخدم لتقييم تغطية الكود أثناء الاختبار. لتفعيل بيانات التغطية أثناء عملية البناء، استخدم علامة "-C instrument-coverage"، على سبيل المثال، بتشغيل عملية البناء باستخدام الأمر "RUSTFLAGS="-C instrument-coverage" cargo build". بعد تشغيل الملف التنفيذي المُنشأ بهذه الطريقة، يُحفظ ملف default.profraw في المجلد الحالي، والذي يُمكن معالجته باستخدام الأداة المساعدة llvm-profdata من مُكوِّن llvm-tools-preview. يُمكن بعد ذلك تمرير المُخرجات التي تُعالجها llvm-profdata إلى llvm-cov لإنشاء تقرير مُعلَّق بمعلومات تغطية الكود. تُؤخذ معلومات الربط بنصوص المصدر من الملف التنفيذي قيد الدراسة، والذي يتضمن البيانات اللازمة حول علاقة عدادات التغطية بالكود. 1| 1| fn main() { 2| 1| println!("Hello, world!"); 3| 1|}
- يدعم مدير حزم البضائع بشكل ثابت علامة "--timings"، مما يتيح إنشاء تقرير مفصل عن تقدم عملية البناء ووقت تنفيذ كل خطوة. يمكن أن يكون هذا التقرير مفيدًا لتحسين أداء عملية البناء.
- يُقدّم مدير حزم Cargo صيغةً جديدةً للتجميع الشرطي واختيار التبعيات الاختيارية. يتم تكوين هذه الصيغة في ملف Cargo.toml من خلال إدراج الخصائص المُسمّاة في قسم [features]، ويتم تفعيلها بتضمين الخصائص أثناء بناء الحزمة باستخدام علامة "--features". يُضيف الإصدار الجديد دعمًا للتبعيات في مساحات أسماء منفصلة والتبعيات الضعيفة.
في الحالة الأولى، طبّقنا إمكانية استخدام عناصر ذات بادئة "dep:" ضمن قسم "[features]" للربط صراحةً بتبعية اختيارية دون إظهارها ضمنيًا كميزة. في الحالة الثانية، أضفنا دعمًا لتمييز التبعيات الاختيارية بعلامة "?" ("package-name?/feature-name")، والتي يجب تضمينها فقط إذا كانت هناك خاصية أخرى تتضمن تلك التبعية الاختيارية. على سبيل المثال، في المثال أدناه، سيؤدي تضمين خاصية serde إلى تضمين تبعية "serde"، بالإضافة إلى خاصية "serde" لتبعية "rgb"، ولكن فقط إذا كانت تبعية "rgb" مُضمنة في مكان آخر: [dependencies] serde = { version = "1.0.133", optional = true } rgb = { version = "0.8.25", optional = true } [features] serde = ["dep:serde", "rgb?/serde"]
- لقد تم إرجاع دعم التجميع المتزايد، الذي تم تعطيله في الإصدار الأخير. تم حل خطأ برنامج التحويل البرمجي الذي تسبب في تعطيل الميزة.
- تم حل العديد من المشاكل المتعلقة بضمان حساب الوقت الرتيب لمؤقت المزامنة الفوري، والذي يأخذ في الاعتبار الوقت الذي يقضيه النظام في وضع السكون. في السابق، كان المؤقت يعتمد على واجهة برمجة تطبيقات نظام التشغيل كلما أمكن، وهو ما لم يُراعِ الحالات الإشكالية التي تُعطل رتابة الوقت، مثل مشاكل الأجهزة، أو المحاكاة الافتراضية، أو أخطاء نظام التشغيل.
- تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
- قوس::new_cyclic
- آر سي::new_cyclic
- شريحة::EscapeAscii
- <[u8]>::escape_ascii
- u8::escape_ascii
- Vec::spare_capacity_mut
- MaybeUninit::assume_init_drop
- MaybeUninit::assume_init_read
- i8::abs_diff
- i16::abs_diff
- i32::abs_diff
- i64::abs_diff
- i128::abs_diff
- الحجم::abs_diff
- u8::abs_diff
- u16::abs_diff
- u32::abs_diff
- u64::abs_diff
- u128::abs_diff
- الاستخدام::abs_diff
- عرض لـ io::ErrorKind
- من أجل رمز الخروج
- ليس ل ! (اكتب "أبدًا")
- _Op_Assign<$t>
- القوس::is_aarch64_feature_detected!
- تم تنفيذ المستوى الثالث من الدعم لمنصات mips64-openwrt-linux-musl* وarmv7-unknown-linux-uclibceabi (softfloat). يتضمن المستوى الثالث الدعم الأساسي، ولكن بدون اختبار تلقائي أو نشر إصدارات رسمية أو التحقق من إمكانية إنشاء التعليمات البرمجية.
- تم تحويل المترجم لاستخدام LLVM 14.
بالإضافة إلى ذلك، يمكنك ملاحظة:
- أُضيف دعمٌ لتمهيد مُجمِّع rustc باستخدام الواجهة الخلفية rustc_codegen_gcc. يُتيح هذا استخدام مكتبة libgccjit الخاصة بمشروع GCC كمُولِّد أكواد في rustc، مما يُمكِّن rustc من دعم البنيات والتحسينات المتاحة في GCC. يُشير تمهيد المُجمِّع إلى إمكانية استخدام مُولِّد أكواد قائم على GCC في rustc لبناء مُجمِّع rustc نفسه. عمليًا، تُتيح هذه الميزة بناء برامج rust للبنيات التي لم تكن مدعومة سابقًا من قِبل rustc.
- الإصدار 0.0.13 من مجموعة أدوات uutils coreutils متوفر الآن. تُطوّر هذه المجموعة نسخةً مكافئةً لحزمة GNU Coreutils، مبنيةً على لغة Rust. تتضمن Coreutils أكثر من 100 أداة، منها sort وcat وchmod وchown وchroot وcp وdate وdd وecho وhostname وid وln وls. يهدف المشروع إلى إنشاء بديل متعدد المنصات لـ Coreutils، قادر على العمل على منصات تشمل Windows، ريدوكس وفوشيا، والتوزيع بموجب ترخيص MIT المتساهل، بدلاً من ترخيص GPL ذي حقوق النسخ.
يُحسّن الإصدار الجديد تطبيق العديد من الأدوات المساعدة، بما في ذلك تحسين توافقية أدوات cp وdd وdf وsplit وtr بشكل ملحوظ مع نظيراتها في جنو. تتوفر الآن وثائق على الإنترنت. يُستخدم مُحلل clap لتحليل وسيطات سطر الأوامر، مما يُحسّن مخرجات علامة "--help"، ويضيف دعمًا لاختصارات الأوامر الطويلة (على سبيل المثال، يمكنك استخدام "ls --col" بدلاً من "ls --color").
المصدر: opennet.ru
