نقدم انتباهكم إلى ترجمة للمنشور على النسخة الجديدة من لغة البرمجة الصدأ الحبيب.
مقدمة
يسر فريق تطوير Rust الإعلان عن إصدار جديد ، 1.37.0. Rust هي لغة برمجة تسمح للجميع بإنشاء برامج موثوقة وفعالة.
إذا قمت بتثبيت الإصدار السابق من Rust باستخدام rustup ، ثم للترقية إلى الإصدار 1.37.0 ، تحتاج فقط إلى تشغيل الأمر التالي:
$ rustup update stable 
إذا لم تكن قد قمت بالفعل بتثبيت rustup ، فيمكنك تثبيته من الصفحة المقابلة لموقعنا على الويب ، وكذلك الاطلاع على ملاحظات الإصدار التفصيلية على GitHub.
ما هو مدرج في نسخة مستقرة؟
تشتمل الابتكارات الرئيسية في Rust 1.37.0 على روابط لخيارات enum عبر الأسماء المستعارة للنوع ، cargo vendor المدمج ، والثوابت غير المسماة ، وتحسين التوجيه الشخصي ، ومفتاح default-run لمشاريع Cargo و #[repr(align(N))] للتعدادات. راجع ملاحظات الإصدار المفصلة لمزيد من المعلومات.
روابط لخيارات enum خلال الأسماء المستعارة للنوع
بدءًا من Rust 1.37.0 ، أصبحت خيارات enum المرجعية ممكنة من خلال الأسماء المستعارة للنوع:
 type ByteOption = Option<u8>; fn increment_or_zero(x: ByteOption) -> u8 { match x { ByteOption::Some(y) => y + 1, ByteOption::None => 0, } } 
في مجموعات impl يتصرف Self كاسم مستعار للنوع ، وبالتالي في Rust 1.37.0 ، أصبح بالإمكان الرجوع إلى خيارات التعداد باستخدام بناء جملة Self::Variant :
 impl Coin { fn value_in_cents(&self) -> u8 { match self { Self::Penny => 1, Self::Nickel => 5, Self::Dime => 10, Self::Quarter => 25, } } } 
وبشكل أكثر تحديدًا ، يسمح لك Rust الآن بالإشارة إلى خيارات التعداد عن طريق "الدقة النسبية للنوع" ، <MyType<..>>::Variant . يتوفر وصف أكثر تفصيلاً في تقرير التثبيت .
دعم البضائع الأصلية للتبعيات البائع
بعد عدة سنوات من الوجود كحزمة منفصلة ، أصبح فريق cargo vendor مدمجًا الآن في Cargo. يستخلص هذا الأمر جميع تبعيات مشروعك في vendor/ الدليل ويظهر جزء التكوين الضروري لاستخدام رمز البائع أثناء التجميع.
يستخدم cargo vendor بالفعل في المشروعات الحقيقية: rustc التحويل البرمجي rustc لإرسال كل تبعياته لإطلاق القطرات ، بينما تستخدمه المشاريع التي تحتوي على مستودعات أحادية لإصلاح رمز التبعية في التحكم في الإصدار.
باستخدام الثوابت غير المسماة في وحدات الماكرو
يمكنك الآن إنشاء (unnamed) (const ) عن طريق استبدال معرفه بتسطير أسفل السطر ( _ ). على سبيل المثال ، في برنامج التحويل البرمجي rustc وجدنا هذا الكود:
 
انتبه إلى static_assert_size!(..) الثاني static_assert_size!(..) : بفضل استخدام الثوابت غير المسماة ، أصبح من الممكن منع تعارض الأسماء عند الإعلان عن عناصر جديدة. في وقت سابق ، ستحتاج إلى كتابة static_assert_size!(MY_DUMMY_IDENTIFIER, usize, 8); . مع إدخال ثوابت غير محددة ، يصبح إنشاء وحدات الماكرو التصريحية والإجرائية المريحة والقابلة لإعادة الاستخدام لأغراض التحليل الثابت.
تحسين توجيه ملف التعريف
يتوفر الآن rustc الشخصي (PGO) في برنامج التحويل البرمجي rustc ، والذي يمكن تمكينه من خلال أعلام برنامج التحويل البرمجي -C profile-generate and -C profile-use .
Profile-Guided Optimization هي تقنية تحسين برنامج المحول البرمجي تقوم بتحليل تشغيل الاختبار بدلاً من التعليمات البرمجية المصدر. يعمل عن طريق تجميع برنامج للتحسين على مرحلتين:
- أولاً ، يتم إنشاء البرنامج باستخدام الأدوات المدمجة في المترجم. يتم ذلك عن طريق تمرير علم rustc-C profile-generate. ثم يجب تشغيل برنامج الأداة على عينات البيانات ، وبعد ذلك سوف يكتب بيانات ملفات التعريف إلى الملف.
- ثم يتم إنشاء البرنامج مرة أخرى ، حيث يتم في هذه المرة تمرير بيانات ملفات التعريف التي تم جمعها مرة أخرى إلى rustcباستخدامrustcاستخدام-C profile-use. سيستخدم هذا التجميع البيانات التي تم جمعها للسماح للمترجم باتخاذ قرارات أفضل بشأن موضع الكود والتضمين والتحسينات الأخرى.
لمزيد من المعلومات حول تحسين ملف تعريف التوجيه ، راجع الفصل المقابل في كتاب برنامج التحويل البرمجي rustc .
اختيار ملف قابل للتنفيذ في مشاريع الشحن
يعد cargo run أداة مريحة جدًا لاختبار تطبيقات وحدة التحكم بسرعة. عند وجود العديد من الملفات القابلة للتنفيذ في حزمة واحدة ، يجب أن تعلن بوضوح اسم الملف القابل للتنفيذ الذي تريد تشغيله باستخدام علامة --bin . هذا يجعل cargo run غير مريح كما نود ، خاصةً عندما يتم استدعاء ملف تنفيذي معين أكثر من غيره.
Rust 1.37.0 يحل هذه المشكلة عن طريق إضافة مفتاح default-run جديد إلى Cargo.toml (المقطع [package] ). وبالتالي ، إذا لم يتم --bin العلامة --bin ، فستقوم Cargo بتشغيل الملف الثنائي المعلن في التكوين.
#[repr(align(N))] للتعدادات
بدءًا من Rust 1.37.0 ، يمكن استخدام السمة #[repr(align(N))] لتحديد محاذاة التعدادات في الذاكرة (سابقًا ، كانت هذه السمة مسموح بها فقط للهياكل (التركيب) والاتحادات ( union )). على سبيل المثال ، سيكون التعداد Align16 ، كما هو متوقع ، محاذاة 16 بايت ، في حين أن المحاذاة الطبيعية بدون #[repr(align(16))] ستكون 4 :
 #[repr(align(16))] enum Align16 { Foo { foo: u32 }, Bar { bar: u32 }, } 
إن دلالات استخدام #[repr(align(N)) AlignN<T> هي نفس تعريف برنامج التفاف AlignN<T> مع هذه المحاذاة ، ثم استخدام AlignN<MyEnum> :
 #[repr(align(N))] struct AlignN<T>(T); 
التغييرات في المكتبة القياسية
استقر الصدأ 1.37.0 على المكونات التالية للمكتبة القياسية:
تغييرات أخرى
خضع بناء الجملة ومدير حزمة الشحن ومحلل Clippy أيضًا لبعض التغييرات.
الأعضاء 1.37.0
اجتمع الكثير من الأشخاص لإنشاء Rust 1.37.0. لا يمكن أن نفعل هذا بدونك جميعًا ، شكرًا!
نود أن نشكر اثنين من رعاة البنية التحتية الجديدة Rust الذين قدموا الموارد اللازمة لبناء Rust 1.37.0: Amazon Web Services (AWS) و Microsoft Azure:
- قدمت AWS خدمة استضافة لإصدار الآثار (المترجمون ، المكتبات ، الأدوات ، والكود المصدري) ، ومنحت حق الوصول إلى هذه القطع الأثرية للمستخدمين من خلال CloudFront ، ومنع انحدارات EC2 من كريتر ، وأدار بنية أساسية أخرى متعلقة بالصدأ تم استضافتها على AWS.
- من أجل الاختبار شديد الصعوبة لمستودع تخزين الصدأ / الصدأ ، قدمت Microsoft Azure لبناة.
من المترجمين
مع أي أسئلة حول لغة Rust ، سيتمكنون من مساعدتك في دردشة Telegram باللغة الروسية أو في دردشة مماثلة للوافدين الجدد .
تمت ترجمة هذا المقال بشكل مشترك بواسطة andreevlex و ozkriff و funkill و Gymmasssorla .