يسر فريق تطوير Rust أن يعلن عن إصدار نسخة جديدة من Rust: 1.29.0. Rust هي لغة برمجة نظام تهدف إلى الأمان والسرعة وتنفيذ التعليمات البرمجية المتوازية.
إذا كان لديك إصدار سابق من Rust مثبتًا باستخدام Rustup ، فإن ترقية Rust إلى الإصدار 1.29.0 تحتاج فقط إلى:
$ rustup update stable
إذا لم تكن قد قمت بتثبيت Rustup بعد ، فيمكنك تثبيته من الصفحة المقابلة على موقعنا. تتوفر ملاحظات إصدار Rust 1.29.0 المفصلة على GitHub.
ما هو مدرج في الإصدار المستقر 1.29.0
1.29 لا تجري الكثير من التغييرات. من المتوقع أن يكون الصدأ 1.30 و 1.31 مهمًا جدًا ، لذلك تم إعداد معظم تكرار 1.29 للتحضير للتغيرات المستقبلية. لا يتعلق ابتكاران بارزان في هذا الإصدار باللغة نفسها: فهذان ميزتان جديدتان في Cargo وكلاهما يتعلقان بالتحذيرات.
cargo fix
تلقائيًا على إصلاح التحذيرات في التعليمات البرمجيةcargo clippy
- محلل ثابت لرمز الصدأ يساعد على التقاط الأخطاء الشائعة وتحسين التعليمات البرمجية ببساطة
cargo fix
مع إصدار Rust 1.29 ، أصبح للشحن أمر فرعي جديد: cargo fix
. إذا كنت قد كتبت في Rust على الأرجح ، فقد صادفت تحذيرات المترجم. على سبيل المثال ، ضع في اعتبارك هذا الرمز:
fn do_something() {} fn main() { for i in 0..100 { do_something(); } }
في ذلك ، نسمي do_something
مائة مرة ، لكن لا نستخدم المتغير i
أبدًا. الصدأ يحذرنا من هذا:
> cargo build Compiling myprogram v0.1.0 (file:///path/to/myprogram) warning: unused variable: `i` --> src\main.rs:4:9 | 4 | for i in 1..100 { | ^ help: consider using `_i` instead | = note: #[warn(unused_variables)] on by default Finished dev [unoptimized + debuginfo] target(s) in 0.50s
انظر تلميح حول إعادة تسمية _i
؟ يمكننا تطبيقه تلقائيًا مع cargo fix
:
> cargo fix Checking myprogram v0.1.0 (file:///C:/Users/steve/tmp/fix) Fixing src\main.rs (1 fix) Finished dev [unoptimized + debuginfo] target(s) in 0.59s
إذا src\main.rs
الآن src\main.rs
، فسوف نرى الرمز المصحح:
fn do_something() {} fn main() { for _i in 0..100 { do_something(); } }
الآن _i
مستخدم في الكود ولم يعد يصدر التحذير.
لا يعمل الإصدار الأول من cargo fix
جميع التحذيرات. يستخدم cargo fix
واجهة برمجة تطبيقات خاصة لعملها ، والتي لا تقدم سوى إصلاح تلك التحذيرات التي نحن على يقين تام منها. بمرور الوقت ، ستتوسع قائمتهم.
cargo clippy
المزيد عن التحذيرات: يمكنك الآن تجربة cargo-clippy
خلال Rustup. Clippy هو محلل ثابت يقوم بالعديد من عمليات التحقق الإضافية على التعليمات البرمجية الخاصة بك.
على سبيل المثال:
let mut lock_guard = mutex.lock(); std::mem::drop(&lock_guard) operation_that_requires_mutex_to_be_unlocked();
من الناحية النحوية ، هذا هو الرمز الصحيح ، ولكن يمكننا أن نصل إلى طريق مسدود لأننا lock_guard
drop
رابط _ إلى lock_guard
_ ، وليس لـ lock_guard
نفسها. استدعاء drop
لارتباط لا معنى له ومن شبه المؤكد خطأ.
قم بتثبيت الإصدار الأولي من Clippy من خلال Rustup:
$ rustup component add clippy-preview
وتشغيله:
$ cargo clippy error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. --> src\main.rs:5:5 | 5 | std::mem::drop(&lock_guard); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: #[deny(drop_ref)] on by default note: argument has type &std::result::Result<std::sync::MutexGuard<'_, i32>, std::sync::PoisonError<std::sync::MutexGuard<'_, i32>>> --> src\main.rs:5:20 | 5 | std::mem::drop(&lock_guard); | ^^^^^^^^^^^ = help: for further information visit https://rust-lang-nursery.imtqy.com/rust-clippy/v0.0.212/index.html#drop_ref
كما ترى من الملاحظة إلى الرسالة ، يمكنك الحصول على قائمة كاملة بجميع التحذيرات الممكنة عبر الرابط.
يرجى ملاحظة أن هذه ليست سوى نسخة تجريبية. لم يصل Clippy بعد إلى 1.0 ، لذا لا يزال من الممكن تغيير مجموعة الشيكات وسلوكها. سنقوم بإصدار المكون clippy
بمجرد استقراره ، ولكننا نطلب منك الآن إلقاء نظرة على الإصدار الأولي وإخبارنا عن تجربتك.
نعم ، لا يزال هناك فارق بسيط: للأسف ، لا يمكنك استخدام clippy مع cargo-fix
. العمل على هذا جار.
انظر ملاحظات الإصدار لمزيد من التفاصيل.
استقرار المكتبة القياسية
تم تثبيت واجهات برمجة التطبيقات التالية في هذا الإصدار:
أيضا ، يمكنك الآن &str
و OsString
.
انظر ملاحظات الإصدار لمزيد من التفاصيل.
تحسينات البضائع
أعلاه ، لقد وصفنا بالفعل أمرين فرعيين جديدين للشحن. أيضا ، Cargo Cargo.lock , git merge
. يمكن تعطيل هذا السلوك مع علامة --locked
.
حصل cargo doc
على علم جديد: --document-private-items
. بشكل افتراضي ، يوثق cargo doc
فقط الأجزاء العامة من واجهة برمجة التطبيقات ، لأنه يهدف إلى إنشاء وثائق المستخدم. ولكن إذا كنت تعمل على الحزمة الخاصة بك ولديها وثائق داخلية ، فإن --document-private-items
ستمكن من إنشاء الوثائق بشكل عام لكل شيء.
انظر ملاحظات الإصدار لمزيد من التفاصيل.
المطورين 1.29.0
شارك الكثير من الناس في تطوير Rust 1.29. لم نتمكن من إكمال العمل بدون كل واحد منكم. شكرا لك!
من مترجم: شكرًا Revertron لمساعدتي في الترجمة.