إصدار لغة البرمجة Rust 1.39

نشرت إصدار لغة برمجة النظام الصدأ 1.39أسسها مشروع موزيلا. تركز اللغة على إدارة الذاكرة الآمنة ، وتوفر إدارة تلقائية للذاكرة ، وتوفر الوسائل لتحقيق توازي وظيفي عالٍ مع تجنب استخدام أداة تجميع البيانات المهملة ووقت التشغيل.

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

رئيسي الابتكارات:

  • استقرت بناء جملة برمجة غير متزامن جديد يعتمد على وظيفة "غير متزامن"، وكتلة النقل غير المتزامن { ... }، وعامل التشغيل ".await"، مما يسهل كتابة المعالجات التي لا تمنع تدفق الأوامر الرئيسي. بالمقارنة مع واجهة برمجة التطبيقات المقدمة سابقًا للإدخال/الإخراج غير المتزامن، فإن بنيات async/.await سهلة الفهم وقابلة للقراءة للغاية وتسمح لك بتنفيذ تفاعلات غير متزامنة معقدة باستخدام تقنيات التحكم في التدفق المألوفة استنادًا إلى الحلقات والعبارات الشرطية والاستثناءات.

    يتيح لك بناء جملة Async-await إنشاء وظائف يمكنها إيقاف تنفيذها مؤقتًا، وإرجاع التحكم إلى سلسلة المحادثات الرئيسية، ثم استئناف التنفيذ من حيث توقفت. على سبيل المثال، يكون مثل هذا الإيقاف المؤقت مطلوبًا عند معالجة الإدخال/الإخراج، حيث يمكن القيام بأعمال أخرى أثناء انتظار وصول القطعة التالية من البيانات. تقوم الوظائف والكتل المعرفة بـ "async fn" و"async move" بإرجاع سمة Future، الذي يحدد تمثيل الحساب غير المتزامن المؤجل. يمكنك بدء عملية حسابية مؤجلة مباشرة والحصول على النتيجة باستخدام عامل التشغيل ".await". لا يتم تنفيذ أي إجراء أو التخطيط له مسبقًا حتى يتم استدعاء .await، مما يسمح بإنشاء بنيات متداخلة معقدة دون أي حمل إضافي.

    غير متزامن fn first_function() -> u32 { .. }
    ...
    دع المستقبل = first_function();
    ...
    دع النتيجة: u32 = Future.await؛

  • استقرت "#![feature(bind_by_move_pattern_guards)]"، مما يسمح باستخدام المتغيرات بنوع الربط "بالحركة" في القوالب واستخدم المراجع لهذه المتغيرات في قسم "if" من التعبير "مباراة". على سبيل المثال، يُسمح الآن بالإنشاءات التالية:

    fn main () {
    دع المصفوفة: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    تطابق المصفوفة {
    NUMS
    إذا كان nums.iter().sum::() == 10

    => {
    إسقاط (الأعداد)؛
    }
    _ => غير قابل للوصول!(),
    }
    }

  • الإشارة مسموحة صفات عند تحديد معلمات الوظيفة والإغلاقات ومؤشرات الوظيفة. يتم دعم سمات الترجمة الشرطية (cfg، cfg_attr) التي تتحكم في التشخيص عبر الوبر (السماح والتحذير والرفض والمنع) وسمات استدعاء الماكرو المساعدة.

    الجبهة الوطنية لين(
    #[cfg(windows)] الشريحة: &[u16], // استخدم المعلمة على نظام Windows
    #[cfg(not(windows))] الشريحة: &[u8], // تستخدم في أنظمة تشغيل أخرى
    ) -> استخدم {
    شريحة لين ()
    }

  • تحذيرات بشأن المشاكل التي تم تحديدها عند التحقق من استعارة المتغيرات (مدقق الاقتراض) باستخدام تقنية NLL (أمد الحياة غير المعجمية)، مترجم في فئة الأخطاء الفادحة. لنتذكر أن نظام التحقق المبني على آلية جديدة لمراعاة عمر المتغيرات المقترضة جعل من الممكن تحديد بعض المشكلات التي لم يلاحظها أحد بواسطة رمز التحقق القديم. نظرًا لأن مخرجات الخطأ لمثل هذه الاختبارات قد تؤثر على التوافق مع التعليمات البرمجية التي كانت تعمل مسبقًا، فقد تم إصدار تحذيرات في البداية بدلاً من الأخطاء. تم الآن استبدال التحذيرات بالأخطاء عند التشغيل في وضع Rust 2018. في الإصدار التالي، سيتم أيضًا تنفيذ إخراج الأخطاء في وضع Rust 2015، والذي سيتخلص أخيرًا من مدقق الاقتراض القديم؛
  • يتم استخدام السمة "const"، التي تحدد إمكانية استخدامها في أي سياق بدلاً من الثوابت، للوظائف Vec::new، String::new، LinkedList::new، str::len، [T]::len , str::as_bytes,
    القيمة المطلقة، Wrapping_abs، وoverflowing_abs؛

  • تم نقل جزء جديد من API إلى فئة مستقرة ، بما في ذلك الطرق المستقرة
    الدبوس::into_inner، Instant::checked_duration_since وInstant::saturating_duration_since؛

  • أصبح لدى مدير حزمة الشحن الآن القدرة على استخدام الامتداد ".toml" لملفات التكوين. تمت إضافة الدعم الأولي لبناء المكتبة القياسية مباشرةً من Cargo. تمت إضافة علامة "--workspace"، لتحل محل العلامة "--all" المثيرة للجدل. تمت إضافة حقل جديد إلى البيانات الوصفية "نشر"، والذي يسمح لك بنشر التبعيات عن طريق تحديد علامة git ورقم الإصدار. تمت إضافة خيار الاختبار "-Ztimings" لإنشاء تقرير HTML لأوقات التنفيذ لمراحل التجميع المختلفة.
  • في المترجم Rustc، تتضمن الرسائل التشخيصية قطع أطراف التعليمات البرمجية التي لا تتناسب مع الوحدة الطرفية. توفير المستوى الثالث من الدعم للمنصات المستهدفة
    i686-unknown-uefi وsparc64-unknown-openbsd. يتضمن المستوى الثالث الدعم الأساسي، ولكن بدون الاختبار الآلي ونشر الإصدارات الرسمية.

المصدر: opennet.ru

إضافة تعليق