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

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

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

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

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

  • يتم توفير القدرة على تحديد رموز الإرجاع الخاصة بك من الوظيفة الرئيسية. في البداية ، يمكن لوظيفة Rust الرئيسية فقط إرجاع نوع "()" (الوحدة) ، والذي يشير دائمًا إلى حالة خروج ناجحة ، ما لم يطلق المطور صراحةً على وظيفة "process :: exit (code)". في Rust 1.26 ، وفرت سمة الإنهاء غير المستقرة في الوظيفة الرئيسية القدرة على إرجاع قيم "Ok" و "Err" ، المقابلة لرموز EXIT_SUCCESS و EXIT_FAILURE في برامج C. في Rust 1.61 ، أصبحت سمة الإنهاء مستقرة ، وتم تقديم نوع ExitCode منفصل لتمثيل رمز إرجاع محدد ، والذي يلخص أنواع الإرجاع الخاصة بالمنصة من خلال توفير ثوابت النجاح والفشل المحددة مسبقًا والطريقة من. لإرجاع رمز الإرجاع التعسفي. استخدام الأمراض المنقولة جنسيا :: العملية :: ExitCode ؛ fn main () -> ExitCode {if! check_foo () {return ExitCode :: from (8)؛ } ExitCode :: SUCCESS}
  • ميزات إضافية ثابتة للوظائف المحددة باستخدام تعبير "const fn" ، والذي يمكن تسميته ليس فقط كوظائف عادية ، ولكن أيضًا يستخدم في أي سياق بدلاً من الثوابت. يتم تقييم هذه الوظائف في وقت الترجمة ، وليس في وقت التشغيل ، لذا فهي تخضع لقيود معينة ، مثل القدرة على القراءة من الثوابت فقط. في الإصدار الجديد ، يُسمح بالعمليات الأساسية مع مؤشرات الوظائف داخل وظائف const (يُسمح بإنشاء المؤشرات وتمريرها وإلقاءها ، ولكن لا يُسمح باستدعاء دالة بواسطة المؤشر) ؛ حدود السمات للمعلمات العامة لوظائف const ، مثل T: Copy ؛ السمات المرسلة ديناميكيًا (dyn Trait) ؛ ضمّن أنواع السمات لوسائط الدوال وقيم الإرجاع.
  • std :: io لمقابض تيار Stdin و Stdout و Stderr الآن عمر ثابت ("ثابت") عند قفله ، مما يسمح ببناء مثل "let out = std :: io :: stdout (). lock ()؛" مع الحصول على مقبض ووضع قفل في تعبير واحد.
  • تم نقل جزء جديد من واجهة برمجة التطبيقات إلى فئة المستقر ، بما في ذلك تم تثبيت طرق وتطبيقات السمات:
    • دبوس :: static_mut
    • دبوس :: static_ref
    • Vec :: retain_mut
    • VecDeque :: retain_mut
    • اكتب للمؤشر <[u8؛ N]>
    • std :: os :: unix :: net :: SocketAddr :: from_pathname
    • الأمراض المنقولة جنسيا :: عملية :: ExitCode
    • الأمراض المنقولة جنسيا :: العملية :: الإنهاء
    • الأمراض المنقولة جنسيا :: موضوع :: JoinHandle :: is_finished
  • تُستخدم خاصية "const" ، التي تحدد إمكانية استخدامها في أي سياق بدلاً من الثوابت ، في الدوال:
    • <* const T> :: offset and <* mut T> :: offset
    • <* const T> :: wrapping_offset و <* mut T> :: wrapping_offset
    • <* const T> :: add and <* mut T> :: add
    • <* const T> :: sub و <* mut T> :: sub
    • <* const T> :: wrapping_add و <* mut T> :: wrapping_add
    • <* const T> :: wrapping_sub و <* mut T> :: wrapping_sub
    • <[T]> :: as_mut_ptr
    • <[T]> :: as_ptr_range
    • <[T]> :: as_mut_ptr_range

بالإضافة إلى ذلك ، يمكننا أن نلاحظ مقالة "الصدأ: استعادية حاسمة" مع ملخص للانطباعات حول لغة Rust بعد كتابة 100 ألف سطر من التعليمات البرمجية فيها أثناء تطوير نظام التشغيل Xous microkernel المستخدم في البرامج الثابتة. من بين أوجه القصور ، بناء الجملة يصعب فهمه ، وعدم اكتمال اللغة وتطورها المستمر ، ونقص التراكيب القابلة للتكرار ، والمشاكل النموذجية مع الثقة في التبعيات في Crates.io ، والحاجة إلى الحفاظ على نظام معين لكتابة رمز آمن. من بين الاحتمالات التي فاقت التوقعات ، تم ذكر وسائل إعادة هيكلة الكود وإعادة صياغة "الاختراقات" المضافة أثناء النماذج الأولية السريعة.

المصدر: opennet.ru

إضافة تعليق