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

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

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

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

  • نفذت الدعم للأنواع صفائف اي حجم. في السابق، نظرًا لعدم القدرة على تحديد الوظائف العامة لجميع القيم الصحيحة، قدمت المكتبة القياسية دعمًا مدمجًا للسمات فقط للمصفوفات التي يصل حجمها إلى 32 عنصرًا (تم تحديد السمات لكل حجم بشكل ثابت). بفضل إنشاء وظيفة الجينات العامة الثابتة ("الأسماء العامة const")، أصبح من الممكن تحديد الوظائف العامة لأي حجم مصفوفة، لكنها لم يتم تضمينها بعد في ميزات اللغة المستقرة، على الرغم من أنها يتم تنفيذها في المترجم ويتم استخدامها الآن متضمن في المكتبة القياسية لصفات الصفيف من أي حجم.

    على سبيل المثال، ستطبع البنية التالية في Rust 1.47 محتويات المصفوفة، على الرغم من أنها كانت ستؤدي إلى حدوث خطأ في السابق:

    fn main () {
    دع xs = [0؛ 34]؛

    println!("{:?}"، xs);
    }

  • يتم توفير إخراج آثار أقصر (أثر خلفي)، والإخراج في حالات الطوارئ. يتم استبعاد العناصر التي لا تهم في معظم المواقف، ولكنها تشوش المخرجات وتشتت الانتباه عن الأسباب الرئيسية للمشكلة، من التتبع. لإرجاع التتبع الكامل، يمكنك استخدام متغير البيئة "RUST_BACKTRACE=full". على سبيل المثال، بالنسبة للكود

    fn main () {
    ذعر!()؛
    }

    في السابق، كان يتم إخراج التتبع على 23 مرحلة، ولكن الآن سيتم تقليصه إلى
    3 خطوات تسمح لك بفهم الجوهر على الفور:

    أصيب الخيط "الرئيسي" بالذعر من "الذعر الصريح"، src/main.rs:2:5
    التتبع الخلفي للمكدس:
    0: الأمراض المنقولة جنسيا::panicking::begin_panic
    في /rustc/d…d75a/library/std/src/panicking.rs:497
    1: الملعب::رئيسي
    في ./src/main.rs:2
    2: النواة::ops::function::FnOnce::call_once
    في /rustc/d…d75a/library/core/src/ops/function.rs:227

  • تم تحديث المترجم Rustc للبناء باستخدام LLVM 11 (الصدأ الاستخدامات LLVM كواجهة خلفية لـ رمز الجيل). في الوقت نفسه، يتم الاحتفاظ بالقدرة على البناء باستخدام LLVMs الأقدم، حتى الإصدار 8، ولكن افتراضيًا (في Rust-lang/llvm-project) يستخدم الآن LLVM 11. ومن المتوقع إصدار LLVM 11 في الأيام المقبلة.
  • على نظام التشغيل Windows، يوفر المترجم Rustc الدعم لتمكين عمليات التحقق من سلامة تدفق التحكم (Control Flow Guard)، والتي يتم تنشيطها باستخدام علامة "-C control-flow-guard". على الأنظمة الأساسية الأخرى، يتم تجاهل هذه العلامة في الوقت الحالي.
  • تم نقل جزء جديد من واجهات برمجة التطبيقات إلى الفئة المستقرة، بما في ذلك المستقرة
    الهوية::new_raw،
    النطاق::is_empty،
    النطاق شامل::is_empty,
    النتيجة::as_deref,
    النتيجة::as_deref_mut,
    فيك::تسرب،
    المؤشر::offset_from،
    f32::TAU و
    f64 :: تاو.

  • يتم استخدام السمة "const" التي تحدد إمكانية استخدامها في أي سياق بدلاً من الثوابت، في الطرق:
    • جديد لجميع الأعداد الصحيحة غير الصفر؛
    • check_add، وchecked_sub، وchecked_mul، وchecked_neg، وchecked_shl، وchecked_shr، وsaturating_add، وsaturating_sub، وsaturating_mul لجميع الأعداد الصحيحة؛
    • is_ascii_alphabetic وis_ascii_uppercase وis_ascii_lowercase وis_ascii_alphanumeric وis_ascii_digit وis_ascii_hexdigit وis_ascii_pcoding وis_ascii_graphic وis_ascii_whitespace وis_ascii_control لأنواع char وu8.
  • من أجل FreeBSD متضمن مجموعة أدوات من FreeBSD 11.4 (FreeBSD 10 لا يدعم LLVM 11).

المصدر: opennet.ru

إضافة تعليق