مرحبا يا هبر! أقدم إليكم ترجمة المقال "فريق صدأ الإصدار" يعلن عن صدأ 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 تحديد سمات المستخدم التي يستخدمونها. حتى الآن ، كانت هذه السمات مقصورة على الأشجار والمسارات الحرفية وفقًا للبناء التالي:
#[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())
. في هذه الأثناء ، تقوم الوظيفة الثانية بإنشاء مكرر جديد ، حيث يتم حساب كل عنصر تالي بناءً على العنصر السابق.
بالإضافة إلى ذلك ، تم تثبيت واجهات برمجة التطبيقات التالية:
انظر ملاحظات الإصدار التفصيلية لمزيد من التفاصيل.