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

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

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

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

  • تمت إضافة وضع التجميع عبر الأنابيب (خط الأنابيب) ، حيث يبدأ تجميع حزمة الصناديق التابعة بمجرد توفر البيانات الوصفية التبعية ، دون انتظار اكتمال تجميعها. عندما تقوم بتجميع حزمة ، لا تحتاج إلى بناء التبعيات بشكل كامل ، فقط قم بتعريف البيانات الوصفية التي تتضمن قوائم بالأنواع والتبعيات والصادرات. يتم توفير البيانات الوصفية في وقت مبكر من عملية التجميع ، لذلك يمكن أن تبدأ الحزم ذات الصلة الآن في التجميع في وقت أبكر بكثير. عند إنشاء حزم فردية ، لا يؤثر الوضع المقترح على الأداء ، ولكن إذا كان الإصدار يتضمن حزمًا ذات تبعيات متفرعة ، فيمكن تقليل إجمالي وقت الإنشاء بنسبة 10-20٪ ؛
  • يتم توفير الكشف عن التطبيق غير الصحيح للوظائف الأمراض المنقولة جنسيا :: mem :: غير مهيأ и الأمراض المنقولة جنسيا :: mem :: صفر. على سبيل المثال ، يعد std :: mem :: uninitialized مناسبًا لإنشاء المصفوفات بسرعة ، ولكنه يضلل المحول البرمجي ، حيث يظهر أنه يتم تنفيذ التهيئة ، ولكن في الواقع تظل القيمة غير مهيأة. تم بالفعل وضع علامة على الوظيفة mem :: uninitialized على أنها مهملة ويوصى باستخدام نوع وسيط بدلاً من ذلك ربما Uninit. بالنسبة إلى mem :: zeroed ، يمكن أن تؤدي هذه الوظيفة إلى مشاكل مع الأنواع التي لا يمكن أن تأخذ قيمًا صفرية.

    تمت إضافة فحص Lint إلى المحول البرمجي للتحقق من السلوك غير المحدد المسمى في الإصدار الجديد لاكتشاف بعض المشكلات في mem :: uninitialized أو mem :: zeroed. على سبيل المثال ، يتم الآن طرح خطأ عند محاولة استخدام mem :: uninitialized أو mem :: المصفرة باستخدام & T و Box ‹Tready ، والتي تمثل كائنات مؤشر لا يمكن أن تكون خالية ؛

  • تم تمديد السمة "# [تم الإهمال]" لتمييز حزم الصناديق على أنها قديمة ومن المقرر إهمالها في المستقبل. اعتبارًا من Rust 1.38 ، يمكن أيضًا تطبيق هذه السمة على وحدات الماكرو ؛
  • تمت إضافة القدرة على تطبيق السمة "# [global_allocator]" في الوحدات الفرعية ؛
  • تمت إضافة الميزة الأمراض المنقولة جنسيا :: أي :: type_name، والذي يسمح لك بمعرفة اسم النوع ، والذي يمكن أن يكون مفيدًا لأغراض التصحيح. على سبيل المثال ، أثناء تنفيذ البرنامج ، يمكنك معرفة أي نوع تم استدعاء الوظيفة:

    fn gen_value ‹T: افتراضي> () -› T {
    println! ("تهيئة مثيل {}"، std :: any :: type_name :: ‹T definitely ())؛
    افتراضي :: افتراضي ()
    }

    fn main () {
    اسمحوا _: i32 = gen_value () ؛ # ستطبع "i32"
    اسمح _: سلسلة = gen_value () ؛ # سيطبع "تخصيص :: string :: String"
    }

  • وظائف موسعة للمكتبة القياسية:
    • شريحة :: يمكن الآن أن تأخذ {concat، connect، Join} قيمة & [T] بالإضافة إلى & T؛
    • يقوم "* const T" و "* mut T" الآن بتنفيذ العلامة :: Unpin؛
    • "قوس‹ [T] ›" و "Rc‹ [T] ›" يقومان الآن بتنفيذ FromIterator ‹T definitely؛
    • iter :: {StepBy، Peekable، Take} نفذ الآن DoubleEndedIterator.
    • ascii :: EscapeDefault تنفذ النسخ والعرض.
  • تم نقل جزء جديد من API إلى فئة مستقرة ، بما في ذلك الطرق المستقرة
    • ‹* const T› :: cast، ‹* mut T› :: cast،
    • المدة :: as_secs_f {32 | 64}،
    • المدة :: div_duration_f {32 | 64}،
    • المدة :: div_f {32 | 64}،
    • المدة :: from_secs_f {32 | 64}،
    • المدة :: mul_f {32 | 64}،
    • عمليات التقسيم مع الباقي
      div_euclid و rem_euclid لجميع الأعداد الصحيحة الأولية ؛

  • تمت إضافة دعم إلى مدير حزمة الشحن لتحديد خيار "الميزات" عدة مرات لتمكين ميزات مختلفة ؛
  • يوفر المترجم الثالث مستوى دعم aarch64-uwp-windows-msvc و i686-uwp-windows-gnu و i686-uwp-windows-msvc و x86_64-uwp-windows-gnu و x86_64-uwp-windows-msvc أهداف وأهداف armv7-unknown-linux - gnueabi و armv7-unknown-linux-musleabi و hexagon-unknown-linux-musl و riscv32i-unknown-none-elf. المستوى الثالث يتضمن الدعم الأساسي ، ولكن بدون الاختبار الآلي والنشر للبنى الرسمية.

المصدر: opennet.ru

إضافة تعليق