صدر إصدار Rust 1.56 من لغة برمجة الأنظمة، التي أسسها مشروع موزيلا، وطُوّرت الآن تحت رعاية مؤسسة Rust Foundation المستقلة غير الربحية. بالإضافة إلى رقم الإصدار العادي، يُطلق على هذا الإصدار أيضًا اسم Rust 2021، ويمثل استقرارًا للتغييرات المقترحة على مدار السنوات الثلاث الماضية. كما سيُشكّل Rust 2021 أساسًا لزيادة الوظائف في السنوات الثلاث المقبلة، على غرار ما شكّله إصدار Rust 2018 أساسًا لتطوير اللغة خلال السنوات الثلاث الماضية.
للحفاظ على التوافق، يمكن للمطورين استخدام تسميات "2015" و"2018" و"2021" في برامجهم لربطها بأجزاء من حالة اللغة المقابلة لإصدارات Rust المختارة. أُضيفت الإصدارات لفصل التغييرات غير المتوافقة، ويتم تكوينها في بيانات تعريف حزمة Cargo عبر حقل "الإصدار" في قسم "[package]". على سبيل المثال، يتضمن إصدار "2018" الوظائف المُستقرة في نهاية عام 2018، ويغطي أيضًا جميع التغييرات المستقبلية التي لا تُؤثر على التوافق. يتضمن إصدار "2021" أيضًا ميزات مُعطلة مقترحة في الإصدار 1.56 الحالي والمعتمدة للتطبيقات المستقبلية. بالإضافة إلى اللغة نفسها، تأخذ الإصدارات في الاعتبار أيضًا حالة الأدوات والوثائق.
أهم حالات عدم التوافق التي تم إصلاحها في Rust 2021 هي:
- التقاط منفصل في عمليات الإغلاق - يمكن الآن لعمليات الإغلاق التقاط أسماء الحقول الفردية بدلاً من المعرف بأكمله. على سبيل المثال، "|| ax + 1" سيلتقط "ax" فقط بدلاً من "a".
- تتيح لك خاصية IntoIterator للمصفوفات: array.into_iter() التكرار على عناصر المصفوفة حسب القيم وليس حسب المراجع.
- في قواعد الماكرو، تم تغيير التعامل مع تعبيرات "|" (عملية OR المنطقية) في الأنماط - الآن يأخذ المعرف ":pat" في المطابقات في الاعتبار أنماط "A | B".
- يتضمن مدير حزمة الشحن الآن الإصدار الثاني من مُحلل الميزات، والذي تم تقديمه في Rust 1.51، بشكل افتراضي.
- تمت إضافة السمات TryFrom وTryInto وFromIterator إلى وحدة مكتبة prelude القياسية.
- تستخدم وحدات الماكرو panic!(..) و assert!(expr, ..) الآن دائمًا format_args!(..) لتنسيق السلاسل، على غرار println!().
- التعبيرات ident# وident»…» وident'…' محجوزة في قواعد اللغة.
- تمت ترقية تحذيرات bare_trait_objects و ellipsis_inclusive_range_patterns إلى أخطاء.
ما الجديد في Rust 1.56:
- في ملف Cargo.toml، ضمن قسم "[package]"، أُضيف حقل إصدار Rust، والذي يُمكّنك من تحديد أدنى إصدار Rust مدعوم لحزمة crate. إذا لم يُطابق الإصدار الحالي المُحدد، فسيتوقف Cargo عن العمل وسيُظهر خطأً.
- عند مطابقة النمط باستخدام تعبيرات "binding @ pattern"، يتم الآن تنفيذ الدعم لتحديد ارتباطات إضافية (على سبيل المثال "let matrix @ Matrix {row_len, .. } = get_matrix();").
- تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
- std::os::unix::fs::chroot
- UnsafeCell::raw_get
- BufWriter::into_parts
- core::panic::{UnwindSafe، RefUnwindSafe، AssertUnwindSafe}
- فيك::تقلص_إلى
- سلسلة::تقلص إلى
- OsString::shrink_to
- PathBuf::shrink_to
- BinaryHeap::shrink_to
- VecDeque::shrink_to
- HashMap::shrink_to
- HashSet::shrink_to
- يتم تطبيق العلم "const"، الذي يحدد إمكانية الاستخدام في أي سياق بدلاً من الثوابت، في الوظائف
- std::mem::transmute
- [ت]::أولا
- [ت]::تقسيم_الأول
- [ت]::الأخير
- [ت]::تقسيم_الأخير
- تم تحويل المترجم لاستخدام إصدار LLVM 13.
- تم تطبيق المستوى الثاني من الدعم لمنصة aarch64-apple-ios-sim، والمستوى الثالث لمنصات powerpc-unknown-freebsd وriscv32imc-esp-espidf. يتضمن المستوى الثالث دعمًا أساسيًا، ولكن دون اختبار آلي، ونشر إصدارات رسمية، والتحقق من إمكانية بناء الشيفرة البرمجية.
دعونا نتذكر أن لغة Rust تركز على أمان الذاكرة، وتوفر إدارة تلقائية للذاكرة، وتوفر وسائل لتحقيق التوازي العالي لتنفيذ المهام، مع الاستغناء عن استخدام جامع القمامة ووقت التشغيل (يتم تقليل وقت التشغيل إلى التهيئة الأساسية وصيانة المكتبة القياسية).
تعمل إدارة الذاكرة التلقائية في Rust على التخلص من الأخطاء عند معالجة المؤشرات والحماية من المشكلات الناشئة عن معالجة الذاكرة ذات المستوى المنخفض، مثل الوصول إلى منطقة الذاكرة بعد تحريرها، أو إلغاء مرجعيات المؤشر الفارغة، أو تجاوزات المخزن المؤقت، وما إلى ذلك. لتوزيع المكتبات وضمان التجميع وإدارة التبعيات، يقوم المشروع بتطوير مدير حزمة Cargo. مستودع صناديق.io مدعوم لاستضافة المكتبات.
المصدر: opennet.ru
