الإصدار 1.37.0 من الصدأ: تحسين ملف تعريف التوجيه ، والثوابت غير المسماة ومورد البضائع

نقدم انتباهكم إلى ترجمة للمنشور على النسخة الجديدة من لغة البرمجة الصدأ الحبيب.


مقدمة


يسر فريق تطوير 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 وجدنا هذا الكود:


 ///   ,    ///  ,   -  . #[macro_export] macro_rules! static_assert_size { ($ty:ty, $size:expr) => { const _: [(); $size] = [(); ::std::mem::size_of::<$ty>()]; // ^    . } } static_assert_size!(Option<Box<String>>, 8); // 1. static_assert_size!(usize, 8); // 2. 

انتبه إلى 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 هي تقنية تحسين برنامج المحول البرمجي تقوم بتحليل تشغيل الاختبار بدلاً من التعليمات البرمجية المصدر. يعمل عن طريق تجميع برنامج للتحسين على مرحلتين:


  1. أولاً ، يتم إنشاء البرنامج باستخدام الأدوات المدمجة في المترجم. يتم ذلك عن طريق تمرير علم rustc -C profile-generate . ثم يجب تشغيل برنامج الأداة على عينات البيانات ، وبعد ذلك سوف يكتب بيانات ملفات التعريف إلى الملف.
  2. ثم يتم إنشاء البرنامج مرة أخرى ، حيث يتم في هذه المرة تمرير بيانات ملفات التعريف التي تم جمعها مرة أخرى إلى 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 .

Source: https://habr.com/ru/post/ar463823/


All Articles