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

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

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

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

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

  • قام مدير حزم Cargo ومستودع crates.io بتثبيت الدعم لبروتوكول Sparse، الذي يحدد طريقة جديدة للعمل مع فهرس يعكس الإصدارات المتاحة لجميع الحزم الموجودة في المستودع. يتيح لك البروتوكول الجديد زيادة سرعة العمل مع crates.io بشكل كبير وحل مشكلات القياس مع زيادة عدد الحزم في المستودع.

    لتقليل التأخير الناتج عن تنزيل فهرس كامل، يتضمن Sparse، بدلاً من الوصول إلى الفهرس باستخدام Git، التنزيل المباشر عبر HTTPS فقط لبيانات الفهرس الضرورية، التي تغطي تبعيات مشروع معين. يتم استخدام خدمة جديدة، Index.crates.io، لتوفير بيانات الفهرس. افتراضيًا، تم التخطيط لاستخدام البروتوكول الجديد في فرع Rust 1.70، وقبل ذلك، لتمكينه، يمكنك تعيين متغير البيئة "CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse" أو إضافة المعلمة "protocol =" إلى "[registries. crates-io]" في ملف .cargo/config.toml "متفرق".

  • تمت إضافة الماكرو "pin!"، والذي يسمح لك بإنشاء بنية Pin<&mut T> من التعبير "T" مع التثبيت المحلي لحالته (على عكس Box::pin، فهو لا يخصص ذاكرة على الكومة، ولكنه يربط على مستوى المكدس).
  • تم اقتراح معالج خطأ تخصيص الذاكرة الافتراضي، والذي يستخدم عند استخدام حزمة التخصيص القياسية. التطبيقات التي تقوم بتمكين التخصيص فقط (بدون std) ستستدعي الآن معالج "الذعر!" عند فشل تخصيص الذاكرة، والذي يمكن اعتراضه اختياريًا باستخدام "#[panic_handler]". ستستمر البرامج التي تستخدم مكتبة std في طباعة معلومات الخطأ إلى stderr والتعطل.
  • تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
    • {الأساسية، الأمراض المنقولة جنسيا}::pin::pin!
    • ضمنا من ل {f32، f64}
    • std::path::MAIN_SEPARATOR_STR
    • ضمنا DerefMut لPathBuf
  • يتم استخدام السمة "const"، التي تحدد إمكانية استخدامها في أي سياق بدلاً من الثوابت، في الدالة VecDeque::new.
  • للعمل على نظام Android الأساسي، يلزم الآن NDK r25 (API 19) على الأقل، أي. تم رفع الحد الأدنى لإصدار Android المدعوم إلى 4.4 (KitKat).
  • تم تنفيذ المستوى الثالث من الدعم لمنصة Sony PlayStation Vita (armv7-sony-vita-newlibeabihf). يتضمن المستوى الثالث الدعم الأساسي، ولكن بدون اختبار تلقائي أو نشر إصدارات رسمية أو التحقق من إمكانية إنشاء التعليمات البرمجية.

المصدر: opennet.ru

إضافة تعليق