تم نشر إصدار لغة البرمجة للأغراض العامة Rust 1.78 ، التي أسسها مشروع Mozilla ، ولكن تم تطويرها الآن تحت رعاية منظمة Rust Foundation المستقلة غير الربحية. تركز اللغة على أمان الذاكرة وتوفر الوسائل لتحقيق توازي وظيفي عالي مع تجنب استخدام أداة تجميع البيانات المهملة ووقت التشغيل (يتم تقليل وقت التشغيل إلى التهيئة الأساسية للمكتبة القياسية وصيانتها).
تعمل طرق معالجة ذاكرة Rust على حفظ المطور من الأخطاء عند معالجة المؤشرات والحماية من المشكلات التي تنشأ بسبب معالجة الذاكرة منخفضة المستوى ، مثل الوصول إلى منطقة الذاكرة بعد تحريرها ، وإلغاء الإشارة إلى المؤشرات الفارغة ، وتجاوزات المخزن المؤقت ، وما إلى ذلك. لتوزيع المكتبات وتوفير عمليات الإنشاء وإدارة التبعيات ، يقوم المشروع بتطوير مدير حزمة الشحن. يتم دعم مستودع crates.io لاستضافة المكتبات.
يتم توفير أمان الذاكرة في Rust في وقت التجميع من خلال التحقق من المرجع ، وتتبع ملكية الكائن ، وتتبع عمر الكائن (النطاقات) ، وتقييم صحة الوصول إلى الذاكرة أثناء تنفيذ التعليمات البرمجية. يوفر Rust أيضًا حماية ضد فيض الأعداد الصحيحة ، ويتطلب تهيئة إلزامية للقيم المتغيرة قبل الاستخدام ، ويعالج الأخطاء بشكل أفضل في المكتبة القياسية ، ويطبق مفهوم المراجع والمتغيرات الثابتة افتراضيًا ، ويوفر كتابة ثابتة قوية لتقليل الأخطاء المنطقية.
الابتكارات الرئيسية:
- تم اقتراح مساحة اسم سمة جديدة "#[تشخيصي]"، مما يوفر وسيلة للتأثير على رسائل الخطأ التي ينتجها المترجم. الأول في المساحة الجديدة هو السمة "#[diagnostic::on_unimplemented]"، والتي يمكن استخدامها لتخصيص رسائل الخطأ التي يتم طرحها في موقف تحتاج فيه إلى استخدام سمة لم يتم تنفيذها للنوع. #[diagnostic::on_unimplemented( message = "لم يتم تنفيذ رسالتي الخاصة بـ `ImportantTrait<{A}>` لـ `{Self}`"، label = "My Label"، note = "Note 1"، note = "Note 2" )] سمة importantTrait {} fn use_my_trait(_: impl importantTrait ) {} fn main() { use_my_trait(String::new()); } خطأ[E32]: رسالتي الخاصة بـ "ImportantTrait لم يتم تنفيذه لـ `String` —> src/main.rs:0277:32 | 12 | use_my_trait(String::new()); | ———— ^^^^^^^^^^^^^ علامتي | | | مطلوب من خلال الحد الذي قدمته هذه المكالمة | = مساعدة: السمة `سمة مهمة لم يتم تنفيذه لـ `String` = note: Note 18 = note: Note 12
- يمكن الآن تأجيل عمليات التحقق المسبق المطبقة على الوظائف غير الآمنة حتى إنشاء التعليمات البرمجية، مما يسمح بإجراء عمليات التحقق هذه دون الحاجة إلى إنشاء المكتبة القياسية في الوضع "#[cfg(debug_assertions)]". لبدء عمليات التحقق، يكفي الآن تمكين تأكيدات تصحيح الأخطاء للاختبار أو إنشاءات تصحيح الأخطاء للتعليمات البرمجية الخاصة بك.
- أصبح الآن سلوك الوظائف في المكتبة القياسية التي تؤثر على محاذاة المؤشرات والشرائح قابلاً للتنبؤ به في وقت التشغيل ويعتمد على البيانات المدخلة. مؤشر الدالة::align_offset، الذي يحسب الإزاحة لمحاذاة المؤشر، يُرجع الآن use::MAX فقط في حالة فشل العملية. الدالتان Slice::align_to وslice::align_to_mut كلاهما، اللتان تحولان الشرائح إلى تمثيل مع شريحة وسطى محاذية وشريحتي البداية والنهاية الأصليتين، تُرجع الآن دائمًا الجزء الأوسط الأكبر.
- تم نقل ما يلي إلى الفئة المستقرة:
- قراءة ضمنية لـ &Stdin
- السماح باستخدام عمر غير ثابت (غير ثابت) لبعض التطبيقات ذات الصلة بالأخطاء std::error::Error.
- تنفيذ ضمني ?القيمة الحجمية مسموح بها.
- ضمنا من من أجل io::خطأ
- تم تثبيت الدالة Barrier::new() لاستخدامها مع السمة "const" في أي سياق بدلاً من الثوابت.
- بالنسبة للأنظمة الأساسية المستهدفة x86_64-pc-windows-msvc وi686-pc-windows-msvc وx86_64-pc-windows-gnu وi686-pc-windows-gnu وx86_64-pc-windows-gnullvm وi686-pc-windows-gnullvm يتطلب الآن إصدار Windows 10 على الأقل.
- تم تنفيذ المستوى الثالث من الدعم لمنصات Wasm32-wasip2 وarm64ec-pc-windows-msvc وarmv8r-none-eabihf وloongarch64-unknown-linux-musl. يتضمن المستوى الثالث الدعم الأساسي، ولكن بدون اختبار تلقائي أو نشر إصدارات رسمية أو التحقق من إمكانية إنشاء التعليمات البرمجية.
- تم تنفيذ المستوى الثاني من الدعم للمنصة المستهدفة Add Wasm32-wasip1. المستوى الثاني من الدعم يتضمن ضمان التجميع.
- تمت إعادة تسمية منصة Wasm32-wasi-preview1-threads إلى Wasm32-wasip1-threads.
- تم تحويل المترجم لاستخدام LLVM 18. عند استخدام LLVM 18 للمعماريتين x86-32 وx86-64، تم تغيير واجهة ABI المرتبطة بالنوعين u128 وi128.
- في Cargo pact manager، تم تثبيت الإصدار 4 من ملفات القفل (lockfile v4).
- يحتوي Cargo على ذاكرة تخزين مؤقت عالمية مستقرة تحتوي على معلومات حول آخر استخدام للبيانات. تتم استضافة ذاكرة التخزين المؤقت في $CARGO_HOME/.global-cache باستخدام SQLite ويتم تحديثها تلقائيًا لتعكس أحدث التغييرات في الفهرس وملف الصندوق ودليل التعليمات البرمجية واستنساخ git وخروج git.
بالإضافة إلى ذلك، تحاول لغة البرمجة Borgo أن تكون أكثر تعبيرًا من لغة Go، ولكنها أقل تعقيدًا من لغة Rust. يجمع Borgo بين أفضل ميزات Go وRust، مما يعوض أوجه القصور في كل لغة. على سبيل المثال، يعد Go بسيطًا ومباشرًا، ولكنه لا يوفر ميزات أمان متقدمة. توفر لغة Rust أدوات للبرمجة الآمنة، ولكنها معقدة للغاية. تم تطوير المشروع بواسطة ماركو سامبيلجريني، مؤلف كتاب The Simple Haskell Handbook ومطور نظام التكامل المستمر Quad CI.

يستخدم Borgo الكتابة الثابتة، والأنواع الشبيهة بالـ Go، والتركيب الشبيه بالصدأ. الفواصل المنقوطة اختيارية في نهاية الأسطر في كود Borgo. يتم تجميع كود Borgo في تمثيل Go المتوافق تمامًا مع حزم Go الحالية. كود المترجم مكتوب بلغة Rust ويتم توزيعه بموجب ترخيص ISC. استخدم التعداد FMT NetworkState { التحميل، فشل (int)، النجاح (T)، } استجابة البنية { العنوان: سلسلة، المدة: int، } fn main() { Let res = Response { title: "Hello World"، المدة: 0، } Let State = NetworkState.Success(res) Let msg = مطابقة الحالة { NetworkState.Loading => "لا يزال التحميل"، NetworkState.Failed(code) => fmt.Sprintf("حصلت على رمز الخطأ: %d"، الكود)، NetworkState.Success (res) => res.title, } fmt.Println(msg) }
المصدر: opennet.ru
