يسر فريق تطوير Rust أن يعلن عن إصدار نسخة جديدة من Rust: 1.28.0. Rust هي لغة برمجة نظام تهدف إلى الأمان والسرعة وتنفيذ التعليمات البرمجية المتوازية.
إذا كان لديك إصدار سابق من Rust مثبتًا باستخدام rustup ، فإن ترقية Rust إلى الإصدار 1.28.0 تحتاج فقط إلى:
$ rustup update stable
إذا لم تكن قد قمت بالفعل بتثبيت rustup ، فيمكنك تثبيته من الصفحة المقابلة على موقعنا. تتوفر ملاحظات الإصدار التفصيلية لـ Rust 1.28.0 على GitHub.
ما هو مدرج في الإصدار المستقر 1.28.0
المخصصون العالميون
باستخدام البرامج المخصصة ، تحصل برامج Rust على ذاكرة في وقت التشغيل. في السابق ، لم يسمح رست بتغيير طريقة تخصيص الذاكرة ، مما حد من استخدامها في بعض الحالات. في بعض الأنظمة الأساسية ، تم استخدام jemalloc ، في أنظمة أخرى - مخصص النظام ، ولكن لا يمكن للمستخدمين التحكم فيه. في الإصدار 1.28.0 ، تم تثبيت السمة #[global_allocator]
، مما يسمح لبرامج Rust بتحديد مخصص النظام ، وكذلك تحديد الموزعين الجدد ، وتنفيذ GlobalAlloc
.
إن المُخصص الافتراضي لبرامج Rust على بعض الأنظمة الأساسية هو jemalloc. توفر المكتبة القياسية الآن مقبض مخصص النظام الذي يمكنك استخدامه للتبديل إلى استخدام مخصص النظام ، عند الضرورة ، عن طريق إعلان ثابت #[global_allocator]
.
use std::alloc::System; #[global_allocator] static GLOBAL: System = System; fn main() { let mut v = Vec::new();
ومع ذلك ، في بعض الأحيان تحتاج إلى تحديد الموزع الخاص بك لمنطقة وظيفية محددة من التطبيق الخاص بك. كما يسهل القيام بذلك نسبيًا من خلال تطبيق GlobalAlloc
. يمكنك قراءة المزيد حول كيفية القيام بذلك في الوثائق .
يستمر العمل على تحسين التشخيص ، هذه المرة مع التركيز على التنسيق:
format!("{_foo}", _foo = 6usize);
سابقًا ، كانت رسالة الخطأ في هذا المكان ضعيفة إلى حد ما:
error: invalid format string: expected `'}'`, found `'_'` | 2 | format!("{_foo}", _foo = 6usize); | ^^^^^^^^
تشير الآن رسالة تشخيصية جديدة إلى السبب المحدد لعدم صلاحية سلسلة التنسيق:
error: invalid format string: invalid argument name `_foo` | 2 | let _ = format!("{_foo}", _foo = 6usize); | ^^^^ invalid argument name in format string | = note: argument names cannot start with an underscore
انظر ملاحظات الإصدار لمزيد من التفاصيل.
استقرار المكتبة القياسية
بالإضافة إلى تثبيت GlobalAlloc
المذكور سابقًا ، يتم تثبيت أنواع أرقام NonZero
في هذا الإصدار. هذه أنواع NonZeroU8
حول أنواع الأعداد الصحيحة القياسية غير الموقعة: NonZeroU128
و NonZeroUsize
و NonZeroUsize
و NonZeroUsize
و NonZeroUsize
و NonZeroUsize
.
تسمح لك بتحسين حجم البيانات المخزنة. على سبيل المثال ، Option<u8>
وحدتي بايت ، بينما Option<NonZeroU8>
واحدة. يرجى ملاحظة أن هذا التحسين يستمر حتى عندما NonZeroU8
لف NonZeroU8
داخل هيكل آخر ؛ يوضح المثال أدناه أن Door
لا يزال يحتل بايت واحد ، حتى عندما يتم وضعه داخل Option
. ينطبق هذا التحسين أيضًا على التعدادات المعرفة من قبل المستخدم ؛ Option
ليس خاصًا هنا.
use std::mem; use std::num::NonZeroU8; struct Key(NonZeroU8); struct Door { key: Key, } fn main() { assert_eq!(mem::size_of::<Door>(), 1); assert_eq!(mem::size_of::<Option<Door>>(), 1); }
تم أيضًا تثبيت العديد من مكونات المكتبة الأخرى ، والتي يمكن العثور على قائمة كاملة بها في ملاحظات الإصدار التفصيلية.
تحسينات البضائع
لن تسمح لك Cargo بنشر الحزم مع نصوص برمجية تعمل على تعديل دليل src. يجب اعتبار دليل src
في الحزمة غير قابل للتغيير.
المطورين 1.28.0
شارك الكثير من الناس في تطوير Rust 1.28. لم نتمكن من إكمال العمل بدون كل واحد منكم. شكرا لك!
من مترجم: أعرب عن امتناني لأعضاء مجتمع ruRust وأوزكريف شخصيًا لمساعدتهم في الترجمة والتدقيق اللغوي