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