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

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

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

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

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

  • يحتوي المترجم Rustc على نظام مستقر قائم على LLVM لإنشاء بيانات التغطية المستخدمة لتقييم تغطية الكود أثناء الاختبار. لتمكين بيانات التغطية أثناء التجميع، يجب عليك استخدام علامة "-Cinstrument-coverage"، على سبيل المثال، بدء التجميع باستخدام أمر "RUSTFLAGS="-C Instrument-coverage"Cargo build". بعد تشغيل الملف القابل للتنفيذ الذي تم تجميعه بهذه الطريقة، سيتم حفظ ملف default.profraw في الدليل الحالي، للمعالجة التي يمكنك استخدام الأداة المساعدة llvm-profdata من مكون llvm-tools-preview. يمكن بعد ذلك تمرير المخرجات التي تمت معالجتها بواسطة llvm-profdata إلى llvm-cov لإنشاء تقرير تغطية التعليمات البرمجية المشروح. يتم أخذ المعلومات حول الارتباط بالكود المصدري من الملف القابل للتنفيذ الذي يتم فحصه، والذي يتضمن البيانات اللازمة حول الاتصال بين عدادات التغطية والكود. 1| 1|الجبهة الوطنية الرئيسية() { 2| 1| println!("مرحبا بالعالم!"); 3| 1|}
  • في مدير حزمة الشحن، تم تثبيت دعم علامة "-times"، والتي تتضمن إنشاء تقرير مفصل عن التقدم المحرز في البناء ووقت تنفيذ كل خطوة. قد يكون التقرير مفيدًا لتحسين أداء عملية التجميع.
  • يقدم مدير حزمة الشحن صيغة جديدة لآلية التجميع الشرطي واختيار التبعيات الاختيارية، التي تم تكوينها في ملف Cargo.toml عن طريق إدراج قائمة بالخصائص المسماة في قسم [الميزات] ويتم تنشيطها عن طريق تمكين الخصائص أثناء إنشاء الحزمة باستخدام علامة "--features". يضيف الإصدار الجديد دعمًا للتبعيات في مساحات أسماء منفصلة والتبعيات الضعيفة.

    في الحالة الأولى، من الممكن استخدام عناصر ذات البادئة "dep:" داخل قسم "[features]" لربط تبعية اختيارية بشكل صريح دون تمثيل هذه التبعية ضمنيًا كميزة. وفي الحالة الثانية، تمت إضافة دعم لوضع علامة "؟". ("اسم الحزمة؟/اسم الميزة") التبعيات الاختيارية التي يجب تضمينها فقط إذا كانت بعض الخصائص الأخرى تتضمن التبعية الاختيارية المحددة. على سبيل المثال، في المثال أدناه، سيؤدي تمكين خاصية serde إلى تمكين تبعية "serde"، بالإضافة إلى خاصية "serde" لتبعية "rgb"، ولكن فقط إذا تم تمكين تبعية "rgb" في مكان آخر: [التبعيات] serde = { version = "1.0.133"، اختياري = صحيح } rgb = { الإصدار = "0.8.25"، اختياري = صحيح } [المميزات] serde = ["dep:serde"، "rgb?/serde"]

  • لقد تم إرجاع دعم التجميع المتزايد، الذي تم تعطيله في الإصدار الأخير. تم حل خطأ برنامج التحويل البرمجي الذي تسبب في تعطيل الميزة.
  • تم حل بعض المشاكل في توفير مؤقتات فورية مع ضمان توقيت رتيب، والذي يأخذ في الاعتبار الوقت الذي يقضيه النظام في وضع السكون. في السابق، تم استخدام واجهة برمجة التطبيقات (OS API) كلما أمكن ذلك لتشغيل المؤقت، والتي لم تأخذ في الاعتبار المواقف الإشكالية التي تكسر رتابة الوقت، مثل مشاكل الأجهزة، أو استخدام المحاكاة الافتراضية، أو الأخطاء في نظام التشغيل.
  • تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
    • قوس::new_cyclic
    • آر سي::new_cyclic
    • شريحة::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • الحجم::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • الاستخدام::abs_diff
    • عرض لـ io::ErrorKind
    • من أجل رمز الخروج
    • ليس ل ! (اكتب "أبدًا")
    • _Op_Assign<$t>
    • القوس::is_aarch64_feature_detected!
  • تم تنفيذ المستوى الثالث من الدعم لمنصات mips64-openwrt-linux-musl* وarmv7-unknown-linux-uclibceabi (softfloat). يتضمن المستوى الثالث الدعم الأساسي، ولكن بدون اختبار تلقائي أو نشر إصدارات رسمية أو التحقق من إمكانية إنشاء التعليمات البرمجية.
  • تم تحويل المترجم لاستخدام LLVM 14.

بالإضافة إلى ذلك، يمكنك ملاحظة:

  • تمت إضافة دعم لتمهيد تشغيل برنامج التحويل البرمجي Rustc باستخدام الواجهة الخلفيةrustc_codegen_gcc، مما يسمح لك باستخدام مكتبة libgccjit من مشروع مجلس التعاون الخليجي كمولد أكواد في Rustc، مما يسمح لـ Rustc بتقديم الدعم للبنيات والتحسينات المتاحة في مجلس التعاون الخليجي. ترقية المترجم تعني القدرة على استخدام منشئ الأكواد المستندة إلى دول مجلس التعاون الخليجي في Rustc لبناء المترجم Rustc نفسه. على الجانب العملي، تتيح لك هذه الميزة إنشاء برامج الصدأ للمعماريات التي لم تكن مدعومة مسبقًا في Rustc.
  • يتوفر إصدار مجموعة أدوات uutils coreutils 0.0.13، والتي يتم من خلالها تطوير نسخة تناظرية من حزمة GNU Coreutils، المعاد كتابتها بلغة Rust. يأتي Coreutils مزودًا بأكثر من مائة أداة مساعدة، بما في ذلك النوع وcat وchmod وchown وchroot وcp وdate وdd وecho وhostname وid وln وls. الهدف من المشروع هو إنشاء تطبيق بديل عبر الأنظمة الأساسية لـ Coreutils، قادر على التشغيل على منصات Windows وRedox وFuchsia، بالإضافة إلى التوزيع بموجب ترخيص MIT المسموح به، بدلاً من ترخيص الحقوق المتروكة GPL.

    لقد قام الإصدار الجديد بتحسين تطبيقات العديد من الأدوات المساعدة، بما في ذلك التوافق المحسن بشكل ملحوظ للأدوات المساعدة cp وdd وdf وsplit وtr مع نظيراتها من مشروع GNU. الوثائق المقدمة عبر الإنترنت. يتم استخدام المحلل اللغوي لتحليل وسيطات سطر الأوامر، مما أدى إلى تحسين إخراج علامة "--help" وإضافة دعم لاختصارات الأوامر الطويلة (على سبيل المثال، يمكنك تحديد "ls -col" بدلاً من "ls -color" ").

المصدر: opennet.ru

إضافة تعليق