أضافت المؤشرات الذكية مزايا مقارنة بالمؤشرات العادية. إليك كل ما تحتاج لمعرفته حول المؤشرات الذكية في Rust.
تعد إدارة الذاكرة إحدى نقاط بيع Rust ، خاصة وأن السلامة لا تتعرض للخطر. يسمح نظام ملكية Rust للمترجم بضمان أمان الكود والتحرر من أخطاء الذاكرة مثل المؤشرات المتدلية وتسرب الذاكرة.
يوفر Rust أيضًا مؤشرات ذكية ببيانات وصفية إضافية وقدرات تتجاوز المؤشرات التقليدية. المؤشرات الذكية سهلة الاستخدام لمعالجة تسرب الذاكرة.
ما هي المؤشرات الذكية في الصدأ؟
المؤشرات الذكية هي واحدة من أنواع بيانات Rust يعمل على توسيع قدرات المؤشرات العادية من خلال تقديم وظائف إضافية مثل المشغلين المحملين بالأحمال ، والمدمرات ، وإدارة الذاكرة التلقائية.
يستخدم Rust الهياكل لتنفيذ المؤشرات الذكية ؛ وبالتالي ، تتمتع المؤشرات الذكية أيضًا بقدرات ملكية.
عند ربط ذاكرة تحتوي على بيانات مخصصة ديناميكيًا بمؤشرات ذكية ، يتم إلغاء تخصيصها تلقائيًا. توفر المؤشرات الذكية وظائف للتحكم في عمر كائن الصدأ، مما يجعلها سهلة الاستخدام لمنع الأخطاء مثل إلغاء مرجع المؤشر الفارغ وتسريبات الذاكرة الشائعة في اللغات الأخرى منخفضة المستوى مثل C و C ++.
فوائد استخدام المؤشرات الذكية
فيما يلي بعض فوائد استخدام المؤشرات الذكية:
- إدارة الذاكرة التلقائية: توفر المؤشرات الذكية إدارة تلقائية للذاكرة ، بما في ذلك التخصيص وإلغاء التخصيص ، على عكس الإدارة اليدوية للذاكرة باستخدام المؤشرات العادية.
- تحسين السلامة: تفرض المؤشرات الذكية دلالات الملكية ، مما يضمن أن مالكًا واحدًا فقط يمكنه الوصول إلى الموارد في كل مرة ، مما يمنع تتبع البيانات والأخطاء المتعلقة بالتزامن.
- المرونة: يوفر Rust مؤشرات ذكية متعددة ، لكل منها مجموعة من دلالات الملكية لكتابة رمز آمن بمرونة.
- إدارة الموارد: يمكنك استخدام المؤشرات الذكية لإدارة الموارد الأخرى مثل معالجات الملفات ومقابس الشبكة عن طريق تغليف الموارد ضمن مؤشر ذكي يسهل إدارة دورة حياتها والتأكد من إغلاقها وإصدارها بشكل صحيح بعد ذلك يستخدم.
- تحسين الأداء: تساعد المؤشرات الذكية على تحسين الأداء عن طريق تقليل نسخ الذاكرة وتخصيصها - حيث يؤدي تقليل مساحة الذاكرة الناتجة عن استخدام المؤشرات الذكية إلى زيادة الأداء.
المؤشرات الذكية مناسبة للتطبيقات متوسطة إلى كبيرة الحجم ، خاصة في الحالات التي تكون فيها إدارة الذاكرة أمرًا بالغ الأهمية.
أنواع المؤشرات الذكية
يوفر Rust أنواعًا متعددة من المؤشرات الذكية ، بما في ذلك صندوق, RC, RefCell، و موتكس.
1. مؤشر الصندوق الذكي
ال صندوق المؤشر الذكي هو أبسط مؤشر ذكي وأكثرها شيوعًا في Rust. ال صندوق يساعد المؤشر الذكي في تخصيص القيم على الكومة وإنشاء مؤشر محاصر لإمكانية الوصول.
ال صندوق يعد Smart Pointer مفيدًا لتخصيص الذاكرة الديناميكي عندما تحتاج إلى التأكد من إلغاء تخصيص الذاكرة تلقائيًا عندما تكون المؤشرات خارج النطاق.
إليك كيف يمكنك التصريح عن ملف صندوق المؤشر:
الجبهة الوطنيةرئيسي(){
// مثيل جديد لمؤشر المربع الذكي
يترك س = صندوق::جديد(5);
println!(خ)
}
ال صندوق type جزء من مقدمة Rust ، لذلك لن تضطر إلى استيراد النوع ، على عكس المؤشرات الذكية الأخرى.
ال x المتغير هو أ صندوق مؤشر يشير إلى قيمة 5 عدد صحيح. يخصص Rust الذاكرة للقيمة الموجودة على الكومة ويتم إلغاء تخصيصها تلقائيًا عندما يكون المتغير خارج النطاق.
2. المؤشر الذكي Rc
ال RC (تم حساب المرجع) يوفر المؤشر الذكي وظائف لإنشاء قيم الملكية المشتركة. ال RC المؤشرات الذكية تعقب عدد المراجع إلى قيمة وإلغاء تخصيص القيمة عندما يكون المرجع الأخير خارج النطاق.
ال RC يكون المؤشر الذكي مفيدًا عندما تحتاج إلى مشاركة ملكية قيمة لإمكانية الوصول في أجزاء متعددة من برنامجك.
للإعلان عن RC مؤشر ذكي ، ستقوم باستيراد ملف RC هيكل من المكتبة القياسية ، يعلن عن ملف RC مع المؤشر جديد وظيفة ، واستنساخ متغير المؤشر بامتداد استنساخ عامل.
يستخدم الأمراض المنقولة جنسيا:: rc:: Rc؛
الجبهة الوطنيةرئيسي() {
// مثيل جديد للمؤشر الذكي RC
يترك س = Rc:: جديد (5);
يترك y = Rc:: clone (& x) ؛
println!("س = {} ، ص = {}"، س ، ص) ؛
}
ال x المتغير هو RC متغير المؤشر ، و ذ المتغير هو استنساخ مع إمكانية الوصول إلى القيمة الموجودة في الذاكرة. عدد المرجع هو اثنان ، ويتم إلغاء تخصيص القيمة من الذاكرة عندما تكون المتغيرات خارج النطاق.
3. المؤشر الذكي RefCell
ال RefCell يوفر المؤشر الذكي قابلية تغيير داخلية تسمح للمراجع الثابتة والمتغيرة بالتعايش طالما أن هناك مرجعًا واحدًا متغيرًا في كل وقت معين.
ال RefCell المؤشر الذكي مفيد عند تغيير القيم التي تمتلكها المراجع القابلة للتغيير.
ال Refcell الوظيفة ليست جزءًا من مقدمة Rust ، لذا ستحتاج إلى استيراد البنية من المكتبة القياسية لاستخدام المؤشر الذكي.
يستخدم الأمراض المنقولة جنسيا:: خلية:: RefCell ؛
الجبهة الوطنيةرئيسي(){
// مثيل جديد من المؤشر الذكي Refcell
يترك x = RefCell:: جديد (5);يترك y = x.borrow () ؛
يترك ض = x.borrow_mut () ؛println!("ص = {}"، * ص) ؛
println!("ض = {}"، * ض) ؛
}
ال Refcell يحتوي المؤشر الذكي على القيمة و ذ المتغير هو المرجع الثابت للقيمة. ال استعارة تقوم الدالة بإنشاء مرجع متغير للقيمة.
يكون البرنامج آمنًا إذا كان هناك مرجع واحد قابل للتغيير في كل مرة.
4. مؤشر موتكس الذكي
ال موتكس يوفر المؤشر الذكي استثناءات متبادلة. ال موتكس المؤشر الذكي مفيد لمزامنة الوصول إلى القيم عبر مؤشرات ترابط متعددة في البرامج المتزامنة.
ال موتكس يوفر المؤشر الذكي استبعادًا متبادلاً لضمان أن مؤشر ترابط واحد فقط يمكنه الوصول إلى القيمة مع منع تتبع البيانات.
ستحتاج إلى استيراد ملف موتكس هيكلة وإنشاء مثيل جديد باستخدام جديد وظيفة للاستخدام موتكس مؤشر ذكي في الصدأ.
يستخدم الأمراض المنقولة جنسيا:: مزامنة:: موتكس ؛
الجبهة الوطنيةرئيسي() {
// مثيل جديد لمؤشر كائن المزامنة (mutex)
يترك عداد = موتكس:: جديد (0);{
يتركموت عدد = counter.lock (). unsrap () ؛
* عدد + = 1;
}
println!("نتيجة: {}"، * counter.lock (). unrap ()) ؛
}
ال عداد المتغير هو الجديد موتكس مثال. ال رئيسي تكتسب الدالة قفلًا على كائن المزامنة (mutex) بامتداد قفل طريقة موتكس مثال. يتيح القفل إمكانية التعديل الآمن لقيمة العداد قبل تحرير القفل وطباعة القيمة.
ال موتكس يضمن النوع أن مؤشر ترابط واحد فقط يمكنه الوصول إلى الموارد المشتركة (في هذه الحالة ، ملف عداد متغير) وتعديل قيمته في وقت واحد. يضمن الاستبعاد المتبادل إجراء تسلسل للوصول المتزامن إلى الموارد المشتركة لمنع تتبع البيانات ومشكلات التزامن الأخرى.
يضمن نموذج ملكية Rust سلامة الذاكرة
المؤشرات الذكية هي إحدى طرق Rust لأمان ومرونة الذاكرة. يضمن نموذج ملكية Rust أن البرامج تستخدم الذاكرة بأمان مع مدقق الاستعارة في وقت الترجمة.
يعد مدقق الاستعارة ميزة مهمة في نموذج ملكية Rust الذي يفرض قواعد صارمة لإمكانية الوصول إلى الذاكرة وتعديلها.