يسر فريق Rust الإعلان عن إصدار نسخة جديدة ، 1.39.0. Rust هي لغة برمجة تسمح للجميع بإنشاء برامج موثوقة وفعالة.
إذا قمت بتثبيت الإصدار السابق من Rust باستخدام rustup
، ثم للترقية إلى الإصدار 1.39.0 ، تحتاج فقط إلى تشغيل الأمر التالي:
$ rustup update stable
إذا لم تكن قد قمت بالفعل بتثبيت rustup
، فيمكنك تثبيته من الصفحة المقابلة لموقعنا على الويب ، وكذلك الاطلاع على ملاحظات الإصدار التفصيلية على GitHub.
ما هو مدرج في الإصدار المستقر 1.39.0
تتضمن أهم الابتكارات .await
async
/ .await
، والإشارات المشتركة إلى القيم المنقولة في أدوات match-guards
وسمات معلمات الوظيفة. انظر ملاحظات الإصدار التفصيلية لمزيد من المعلومات.
مع .await
، .await
على .await
في وقت سابق في Rust 1.36.0 ، أعلنا عن توفر ميزة Future
. ثم لاحظنا أن:
نأمل أن يسمح هذا الابتكار .await
والمكتبات والنظام الإيكولوجي بأكمله بالتحضير .await
async
/ .await
، الذي من المقرر أن يستقر في المستقبل القريب.
يتم إعطاء الوعد - الوفاء بالوعد. يسرنا أن نعلن أن .await
async
/ .await
الذي طال انتظاره ، والذي يسمح لنا بتحديد الوظائف والكتل غير async
( async
) وانتظار تنفيذها ( .await
) ، مستقر أخيرًا!
وظيفة غير متزامنة المعرفة باستخدام بناء جملة async fn
(بدلاً من fn
المعتاد) لا تفعل شيئًا إلا عند استدعائها ، فإنها تقوم بإرجاع كائن يقوم بتطبيق سمة Future
. هذا الكائن هو حساب معلق ، والذي يمكن إكماله باستخدام بناء جملة .await
. بالإضافة إلى ذلك ، تعمل async fn
و async { ... }
و async move { ... }
كإغلاقات ويمكن استخدامها لتعريف القيم الحرفية غير المتزامنة.
يمكنك قراءة المزيد حول إصدار async
/ .await
في .await
مدونة Niko .await
.
روابط مشتركة لقيم التجوال في match-guards
عند مطابقة صورة ، يمكن ربط المتغير المعروف بالربط بإحدى الطرق التالية:
حسب المرجع ، غير قابل للتغيير أو قابلة للتغيير. يمكن القيام بذلك بشكل صريح ، على سبيل المثال ، باستخدام بناء الجملة ref my_var
أو ref mut my_var
على التوالي. دائما تقريبا ، سيتم عرض وضع الخاطف تلقائيا.
حسب القيمة - إما عن طريق النسخ (إذا كان نوع المتغير المنضم يطبق سمة Copy
) ، أو بنقله إلى الملكية .
الآن يُسمح باستخدام متغيرات القالب في if- قيود القالب ، إذا تم نقل الملكية إلى هذا المتغير (أي المتغير في القالب binds-by-move). سابقا ، سيتم تجاهل الكود التالي:
fn main() { let array: Box<[u8; 4]> = Box::new([1, 2, 3, 4]); match array { nums
بدءًا من Rust 1.39.0 ، يقبل المترجم الجزء أعلاه بدون تحذيرات وأخطاء. نأمل أن يزيد هذا الابتكار من قابلية استخدام تعبير match
.
سمات المعلمات وظيفة
بدءًا من Rust 1.39.0 ، يمكن تطبيق السمات على معلمات الوظائف والإغلاقات ومؤشرات الوظائف. في السابق ، يمكن تمثيل الدالة len()
كما يلي:
#[cfg(windows)] fn len(slice: &[u16]) -> usize { slice.len() } #[cfg(not(windows))] fn len(slice: &[u8]) -> usize { slice.len() }
لكن Rust 1.39.0 يجعل كتابة الكود أعلاه أبسط بكثير:
fn len( #[cfg(windows)] slice: &[u16],
السمات القابلة للاستخدام تشمل:
cfg_attr
الشرطي: cfg
و cfg_attr
؛
تحقق الإدارة: allow
، warn
، deny
forbid
.
سمات المساعدة المستخدمة من قبل وحدات ماكرو السمة الإجرائية لعناصر بناء الجملة.
نأمل أن يساعد هذا الابتكار النظام الإيكولوجي في كتابة DSLs المعبرة عن الكلي.
تصبح تحذيرات التحقق من هجرة الاقتراض من الأخطاء الخطيرة في Rust 2018
في الإصدار 1.35.0 ، أعلنا أن محلل الاقتراض الجديد (NLL) جاء إلى محرري Rust 2015 بعد إصداره لمحرري Rust 2018 في الإصدار 1.31 .
كما هو مذكور في الإصدار 1.35.0 ، تم تصميم محلل الاقتراض السابق باستخدام الأخطاء التي سمحت باستخدام الذاكرة غير الآمن. تم تصحيح هذه الأخطاء باستخدام محلل جديد يقوم بتنفيذ NLL. نظرًا لأن هذه الإصلاحات يمكن أن تنكسر رمز العمل ، قرر فريق Rust تقديمها تدريجيًا ، والتحقق من أن المحلل السابق يجب أن يقبل الرمز ، الذي سيرفضه المحلل الجديد. إذا كان الأمر كذلك ، فستصبح الأخطاء تحذيرات بدلاً من ذلك.
بدءًا من Rust 1.39.0 ، أصبحت هذه التحذيرات الآن أخطاء في إصدار Rust 2018 .
في الإصدار التالي من Rust 1.40.0 ، سيتم تطبيق هذه القاعدة أيضًا على كود مراجعة Rust 2015 ، والذي سيؤدي إلى إزالة محلل الاقتراض القديم تمامًا من المحول البرمجي.
إذا كنت متأثرًا بهذه التغييرات ، أو كنت ترغب في معرفة المزيد ، فتحقق من منشور مدونة Niko Matsakis .
المزيد من الوظائف الثابتة في المكتبة القياسية
بدءًا من Rust 1.39.0 ، يتم تمييز الوظائف التالية كـ const fn
( const fn
):
وظائف مستقرة في المكتبة القياسية
تم تثبيت الوظائف التالية في Rust 1.39.0:
تغييرات أخرى
خضع بناء الجملة ومدير حزمة الشحن ومحلل Clippy أيضًا لبعض التغييرات.
يرجى قراءة ملاحظات التوافق لمعرفة ما إذا كانت هذه التغييرات تؤثر عليك.
الأعضاء 1.39.0
اجتمع الكثير من الأشخاص لإنشاء Rust 1.39.0. لا يمكن أن نفعل هذا بدونك جميعًا ، شكرًا !
من المترجمين
مع أي أسئلة حول لغة Rust ، سيتمكنون من مساعدتك في دردشة Telegram باللغة الروسية أو في دردشة مماثلة للوافدين الجدد .
تمت ترجمة هذا المقال بشكل مشترك بواسطة andreevlex و blandger و funkill و Hippolot .