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

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

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

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

  • استقرت السمة Future، والتي تمثل قيمة ربما لم يكتمل تقييمها بعد أثناء استخدام الكتل غير المتزامنة / .await. القيم غير المتزامنة المحددة باستخدام المستقبل تجعل من الممكن الاستمرار في تنفيذ العمل المفيد في الخيط، بينما تنتظر في نفس الوقت الانتهاء من حسابات قيمة معينة؛
  • استقرت المكتبة تخصيص، والذي يوفر مؤشرات ومجموعات ذكية لإدارة القيم المخصصة للذاكرة. يستخدم تخصيص الذاكرة في std الآن النوع المزيد، والتي يتم إعادة تصديرها من تخصيص. يعد الاستخدام المنفصل للتخصيص منطقيًا في التطبيقات غير المرتبطة بـ std ("#![no_std]")، وكذلك في المكتبات المصممة للاستخدام في برامج مماثلة بدون std؛
  • لتجاوز عمليات التحقق من التهيئة الصحيحة للقيم مقترح النوع الوسيط ربما Uninit، والتي يمكن استخدامها بدلاً من الدالة mem::uninitialized كبديل أكثر أمانًا. تعتبر الدالة mem::uninitialized مناسبة لإنشاء المصفوفات بسرعة، ولكنها تضلل المترجم لأنه يبدو أنه قد تمت تهيئته، ولكن في الواقع تظل القيمة غير مهيأة. يسمح لك MaybeUninit بالإشارة بوضوح للمترجم إلى أن القيمة غير مهيأة، لمراعاة السلوك غير المحدد المحتمل المرتبط بهذا، وأيضًا لتنظيم عمليات التحقق في البرامج من خلال "maybe_t:" والتهيئة خطوة بخطوة، مما يشير إلى اكتمالها باستخدام استدعاء ".assume_init()". مع ظهور MaybeUninit، تم إهمال وظيفة mem::uninitialized ولا يوصى باستخدامها؛
  • تم تثبيت تقنية NLL (أزمنة الحياة غير المعجمية)، التي وسعت نظام تسجيل عمر المتغيرات المقترضة، للغة Rust 2015 (في البداية، تم دعم NLL فقط بواسطة Rust 2018). بدلاً من الالتزام بفترات الحياة على المستوى المعجمي، تقوم NLL بذلك على مستوى مجموعة المؤشرات في الرسم البياني لتدفق التنفيذ. يتيح لك هذا الأسلوب زيادة جودة التحقق من استعارة المتغيرات (مدقق الاقتراض) والسماح بتنفيذ بعض أنواع التعليمات البرمجية الصحيحة، والتي أدى استخدامها سابقًا إلى حدوث خطأ. السلوك الجديد أيضاً يجعل التصحيح أسهل بكثير؛
  • تم تضمين التنفيذ الجديد للصفائف الترابطية خريطة التجزئة، على أساس تطبيق الهيكل الطاولة السويسرية (يتم تحميله تلقائيًا هاش براون::HashMap، ما لم يُنص صراحةً على خلاف ذلك، مثل std::HashMap، الذي يعتمد على SipHash 1-3). تظل واجهة البرنامج كما هي، وتتلخص الاختلافات الملحوظة للمطور في زيادة الأداء وتقليل استهلاك الذاكرة؛
  • في البضائع مدير الحزمة مضاف خيار "--offline"، الذي يتيح التشغيل دون الوصول إلى الشبكة، حيث يتم استخدام الحزم المخزنة مؤقتًا في النظام المحلي فقط عند تثبيت التبعيات. إذا لم تكن التبعية موجودة في ذاكرة التخزين المؤقت المحلية، فسيتم طرح خطأ. لتحميل التبعيات مسبقًا في ذاكرة التخزين المؤقت المحلية قبل عدم الاتصال بالإنترنت، يمكنك استخدام أمر "cargo fetch"؛
  • تم تنفيذ القدرة على استدعاء الماكرو "dbg!" تشير إلى عدة حجج؛
  • يتم استخدام السمة "const"، التي تحدد إمكانية استخدامها في أي سياق بدلاً من الثوابت، للطرق
    التخطيط::from_size_align_unchecked،
    مذكرة::needs_drop,
    غير فارغة :: تتدلى و
    غير Null::cast;

  • تم نقل جزء جديد من API إلى فئة مستقرة ، بما في ذلك الطرق المستقرة
    المهمة::واكر، المهمة::استطلاع،
    VecDeque::rotate_left، VecDeque::rotate_right،
    قراءة::read_vectored، كتابة::write_vectored،
    التكرار::منسوخ،
    BorrowMut (للسلاسل) وstr::as_mut_ptr.

المصدر: opennet.ru

إضافة تعليق