1.34 الصدأ الإصدار

مرحبا يا هبر! أقدم إليكم ترجمة المقال "فريق صدأ الإصدار" يعلن عن صدأ 1.34.0 " .


يسر فريق تطوير Rust الإعلان عن إصدار نسخة جديدة من Rust ، 1.34.0. Rust هي لغة برمجة تمكن الجميع من إنشاء برامج موثوقة وفعالة.


إذا كان لديك إصدار سابق من Rust مثبتًا باستخدام rustup ، ثم لترقية Rust إلى الإصدار 1.34.0 ، ما عليك سوى القيام بما يلي:


$ rustup update stable 

إذا لم تكن قد قمت بالفعل بتثبيت rustup ، فيمكنك تثبيته من الصفحة المقابلة لموقعنا على الويب.


ما هو مدرج في الإصدار المستقر 1.34.0


التحسين الرئيسي لهذا الإصدار هو دعم سجلات الشحن البديلة. هل يشمل الإصدار أيضًا دعمًا ? في اختبارات الوثائق ، بعض التحسينات في #[attribute(...)] وتثبيت TryFrom . اقرأ عن الأشياء الرئيسية أو راجع ملاحظات الإصدار التفصيلية لمزيد من المعلومات.


سجلات cargo البديلة


قبل الإصدار 1.0 ، كان لدى Rust سجل عام ، crates.io . نشر الأشخاص الصناديق باستخدام cargo publish المنشورة Cargo.toml هذه الصناديق بسهولة في قسم [dependencies] في Cargo.toml .


ومع ذلك ، لا يريد الجميع نشر صناديقهم على الصناديق. لا يمكن للأشخاص الذين يدعمون مشاريع المصادر المغلقة استخدام crates.io ، وبدلاً من ذلك كان عليهم تحديد git أو path في التبعيات. لا يوجد شيء مثل هذا بالنسبة للمشروعات الصغيرة ، ولكن إذا كان لدى مؤسستك الكثير من الصناديق المغلقة ، فستفقد مزايا دعم الإصدار المتاح في الصناديق.


بدءًا من هذا الإصدار ، قد تدعم Cargo سجلات بديلة. تتعايش هذه السجلات مع crates.io ، بحيث يمكنك كتابة البرامج التي تعتمد على crates.io والسجل الخاص بك. ومع ذلك ، لا يمكن أن تعتمد subracks crates.io على سجل خارجي.


لاستخدام السجلات البديلة ، يجب عليك إضافة الأسطر التالية إلى .cargo/config . يمكن أن يكون هذا الملف في الدليل الرئيسي ( ~/.cargo/config ) أو في دليل الحزمة.


 [registries] my-registry = { index = "https://my-intranet:8080/git/index" } 

إضافة التبعية من سجل بديل سهل. عند تحديد التبعية في Cargo.toml ، استخدم مفتاح registry حتى تعرف Cargo أنك تريد استلام الصندوق من السجل البديل:


 [dependencies] other-crate = { version = "1.0", registry = "my-registry" } 

بصفتك مؤلف الصندوق ، إذا كنت ترغب في نشر صندوقك في سجل بديل ، فإن أول ما عليك فعله هو حفظ الرمز المميز للمصادقة في ~/.cargo/credentials باستخدام أمر cargo login :


 cargo login --registry=my-registry 

بعد ذلك ، يمكنك استخدام علامة - --registry لتحديد السجل الذي سيتم فيه نشر الحامل:


 cargo publish --registry=my-registry 

حول كيفية تشغيل السجل الخاص بك ، يمكنك أن تجد في الوثائق .


? في اختبارات الوثائق


هل اقترح RFC 1937 إضافة دعم المشغل ? في وظائف fn main() ، #[test] واختبارات التوثيق ، مما يسمح لهم بإرجاع Option<T> أو Result<T, E> حيث يؤدي الخيار مع وجود خطأ إلى رمز إنهاء غير صفري في حالة fn main() أو اختبار تم إسقاطه في حالة الاختبارات .


تم تنفيذ الدعم في fn main() و #[test] لفترة طويلة . ومع ذلك ، اقتصر الدعم في اختبارات الوثائق على الاختبارات التي كان فيها fn main() حاضرًا بشكل صريح.


? تمت إضافة الدعم الكامل في هذا الإصدار ? في اختبارات الوثائق. الآن يمكنك الكتابة في اختبارات الوثائق الخاصة بك:


 /// ```rust /// use std::io; /// let mut input = String::new(); /// io::stdin().read_line(&mut input)?; /// # Ok::<(), io:Error>(()) /// ``` fn my_func() {} 

في الجزء السفلي من اختبار الوثائق ، لا تزال بحاجة إلى الإشارة إلى نوع الخطأ الذي سيتم استخدامه.


دعم دفق الرمز المميز في سمات المستخدم


يمكن لوحدات الماكرو الإجرائية في Rust تحديد سمات المستخدم التي يستخدمونها. حتى الآن ، كانت هذه السمات مقصورة على الأشجار والمسارات الحرفية وفقًا للبناء التالي:


 #[foo(bar)] #[foo = "bar"] #[foo = 0] #[foo(bar = true)] #[foo(bar, baz(quux, foo = "bar"))] 

بخلاف وحدات الماكرو الإجرائية ، لا يمكن لهذه السمات المساعدة قبول دفق تعسفي من الرموز المميزة في المحدد ، وهذا هو السبب في أنك لا تستطيع كتابة #[range(0..10)] أو #[bound(T: MyTrait)] . تستخدم رفوف وحدات الماكرو الإجرائية سلاسل بدلاً من الجمل مثل هذا ، على سبيل المثال #[range("0..10")] .


باستخدام هذا الإصدار ، تسمح السمات المخصصة #[attr($tokens)] باستخدام الرموز المميزة التعسفية في $tokens ، $tokens وفقًا لوحدات الماكرو. إذا كنت مؤلف قفص ماكرو إجرائي ، فالرجاء التحقق من استخدام السلاسل في بناء جملة سمات المستخدم الخاصة بك وما إذا كان يمكن استبدالها بدفق من الرموز المميزة.


TryFrom و TryInto


تم تثبيت TryInto و TryInto لدعم أخطاء تحويل النوع.


على سبيل المثال ، from_be_bytes والأساليب ذات الصلة لأنواع الأعداد الصحيحة صفيفًا ، ولكن غالبًا ما تتم قراءة البيانات من خلال الشرائح. يعد التحويل اليدوي بين الشرائح والمصفوفات مملاً. مع السمات الجديدة ، يمكن القيام بذلك على نفس السطر مثل .try_into() .


 let num = u32::from_be_bytes(slice.try_into()?); 

بالنسبة للتحويلات التي لا يمكن أن تفشل ، مثل u8 إلى u32 ، تتم إضافة نوع u32 . لهذا السبب ، TryFrom تطبيق TryFrom تلقائيًا على كل ما ينفذ سمة From . في المستقبل ، نأمل أن نجعل Infallible اسمًا مستعارًا ! (أبدا) .


fn before_exec إهمال fn before_exec لصالح unsafe fn pre_exec


في الأنظمة المشابهة لـ Unix ، تسمح لك CommandExt::before_exec بجدولة إغلاق قبل استدعاء exec .


تم تنفيذ هذا الإغلاق في سياق العملية الفرعية بعد الشوكة. هذا يعني أنه يمكن تكرار الموارد ، مثل واصفات الملفات ومناطق الذاكرة. بمعنى آخر ، يمكنك الحصول على نسخة من قيمة نوع غير Copy في عمليات مختلفة ، بينما يبقى الأصل في الأصل. هذا قد يؤدي إلى سلوك غير محدد وكسر المكتبات التي تشير إلى عدم وجود ازدواجية .


لذلك ، يجب أن تكون وظيفة before_exec unsafe . في هذا الإصدار ، وضعنا علامة على fn before_exec لصالح unsafe fn pre_exec . عند استدعاء CommandExt::pre_exec تحتاج إلى التأكد من أن الإغلاق لا ينتهك CommandExt::pre_exec المكتبة عن طريق إنشاء تكرارات غير صالحة. إذا قمت بتوفير مكتبة في وضع مماثل before_exec ، فكر في التقادم وقم بتوفير بديل unsafe .


تثبيت المكتبة


في 1.34.0 ، تم توسيع مجموعة الأعداد الصحيحة الذرية الموقعة وغير الموقعة ، بدءًا من 8 بت ( AtomicU8 ) وتنتهي بـ 64 بت.


تم تثبيت أعداد صحيحة غير NonZeroU8 غير موقعة مثل NonZeroU8 مسبقًا . بفضل هذا ، يكون Option<NonZeroU8> بنفس حجم u8 . NonZeroI8 تثبيت الإصدارات الموقعة مثل NonZeroI8 في هذا الإصدار.


يتم تثبيت الدالات iter::from_fn و iter::from_fn iter::successors . الأول يتيح لك إنشاء مكرر من FnMut() -> Option<T> . لاسترداد العناصر بشكل متكرر من متجه ، يمكنك الآن الكتابة from_fn(|| vec.pop()) . في هذه الأثناء ، تقوم الوظيفة الثانية بإنشاء مكرر جديد ، حيث يتم حساب كل عنصر تالي بناءً على العنصر السابق.


بالإضافة إلى ذلك ، تم تثبيت واجهات برمجة التطبيقات التالية:



انظر ملاحظات الإصدار التفصيلية لمزيد من التفاصيل.

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


All Articles