صدأ 1.29 الإصدار

يسر فريق تطوير 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 لمساعدتي في الترجمة.

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


All Articles