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

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

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

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

  • يقوم مدير حزمة Cargo بدمج أمر "cargo Tree"، الذي يعرض رسمًا بيانيًا للتبعية يشبه الشجرة. تمت إضافة أيضًا خيار "—التكرارات" ("cargo Tree -d")، والذي يسمح لك بتقييم التبعيات في إصدارات مختلفة من نفس الحزمة.

    mdbook v0.3.2 (/Users/src/rust/mdbook)
    ├── الأمونيا v3.0.0
    │ ├── html5ever v0.24.0
    │ │ ├── سجل v0.4.8
    │ │ │ └── cfg-if v0.1.9
    │ │ ├── ماك v0.1.1
    │ │ └── Markup5ever v0.9.0
    │ │ ├── سجل v0.4.8 (*)
    │ │ ├── فف v0.7.24
    │ │ │ └── phf_shared v0.7.24
    │ │ │ ├── سيهاشر v0.2.3
    │ │ │ └── أحادي الحالة v1.4.2
    │ │ │ [تبعيات البناء] │ │ │ └── version_check v0.1.5
    ...

  • بالنسبة للتطبيقات غير المرتبطة بـ std ("#![no_std]")، يتم تنفيذ دعم تقنيات البرمجة غير المتزامنة استنادًا إلى وظيفة "async"، وكتلة async move { ... } وعامل التشغيل ".await"، الذي تبسيط تدفق الأوامر الرئيسية للمعالجات غير المحظورة.
  • تمت إضافة دعم لنظام تعريف التسلسل الهرمي للوحدة القابلة للتوسيع إلى المحلل اللغوي. على سبيل المثال، لن تنتج البنية التالية خطأ، على الرغم من الغياب الفعلي للوحدة "foo/bar/baz.rs" (لا تزال البنية غير صالحة لغويًا وقد تسبب خطأ، ولكن يمكن رؤية التغييرات وتحليلها على مستوى التجميع الكلي والشرطي):

    #[cfg(FALSE)] وزارة الدفاع فو {
    شريط التعديل {
    مود باز؛
    }
    }

  • أضاف المترجم Rustc القدرة على استخدام علامة "-C codegen-units" في الوضع التزايدي. تمت إعادة صياغة تطبيق Catch_unwind بحيث لا يكون له أي تأثير على الأداء إذا تم تعطيل عملية التفكيك ولم يتم طرح أي استثناءات.
  • تم توفير دعم المستوى 64 لمنصات aarch64-unknown-none وaarch64-unknown-none-softfloat وarm86-apple-tvos وx64_XNUMX-apple-tvos. يتضمن المستوى الثالث الدعم الأساسي، ولكن بدون الاختبار الآلي ونشر الإصدارات الرسمية.
  • تم نقل جزء جديد من واجهات برمجة التطبيقات إلى الفئة المستقرة، بما في ذلك المستقرة
    باثبوف::with_capacity،
    باثبوف::سعة,
    PathBuf::واضح,
    باثبوف::احتياطي,
    PathBuf::reserve_exact,
    باثبوف::shrink_to_fit,
    {f32|f64}::to_int_unchecked,
    التخطيط::align_to,
    التخطيط::pad_to_align،
    تخطيط::صفيف و
    التخطيط::تمديد.

  • وظائف موسعة للمكتبة القياسية:
    • تمت إضافة متغير "vec![]" خاص ينعكس مباشرة في Vec::new()، مما يسمح باستخدام "vec![]" في السياق بدلاً من الثوابت.
    • تمت إضافة تطبيق (ضمني) للسمة لتحويل::Infallible مزيج.
    • تطبق OsString مؤشرات ذكية DerefMut и IndexMut، إرجاع "&mut OsStr".
    • تمت إضافة دعم لليونيكود 13.
    • تم تنفيذها في السلسلة من <&mut str>.
    • يقوم IoSlice بتنفيذ السمة نسخ.
    • فيك تم التنفيذ من<[T; ن]>.
    • يقوم proc_macro::LexError بتنفيذ fmt::Display والخطأ.
  • يتم استخدام السمة "const"، التي تحدد ما إذا كان يمكن استخدامها في أي سياق بدلاً من الثوابت، في أساليب from_le_bytes وto_le_bytes وfrom_be_bytes وto_be_bytes وfrom_ne_bytes وto_ne_bytes لجميع أنواع الأعداد الصحيحة.
  • تمت إضافة دعم لإنشاء مكتبات ثابتة بتنسيق ".a" بدلاً من ".lib" لمنصات GNU على نظام Windows.
  • تم رفع الحد الأدنى من متطلبات LLVM إلى الإصدار 8 من LLVM.

المصدر: opennet.ru

إضافة تعليق