عدم ارجاع به اشاره‌گرهای خام

ایجاد اشاره‌گر ایمن است، اما عدم ارجاع به آنها «ناامن» یا unsafe است:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 10 minutes.

این تمرین خوبی است (و طبق راهنمای سبک Android Rust لازم است) برای هر بلوک unsafe یک نظر بنویسید و توضیح دهد که چگونه کد داخل آن الزامات ایمنی عملیات ناامنی را که انجام می‌دهد برآورده می‌کند.

در مورد عدم ارجاع اشاره‌گر، این بدان معنی است که نشانگرها باید valid باشند، یعنی:

  • اشاره‌گر باید غیر تهی یا non-null باشد.
  • اشاره‌گر باید dereferenceable باشد (در محدوده یک object اختصاص داده شده).
  • این object نباید جابجا شده باشد.
  • دسترسی همزمان به یک مکان نباید وجود داشته باشد.
  • اگر اشاره‌گر با فرستادن یک reference به دست آمده باشد، object زیرین باید live باشد و نمی‌توان از هیچ مرجعی برای دسترسی به حافظه استفاده کرد.

در بیشتر موارد، اشاره‌گر نیز باید به درستی تراز شود.

بخش «NOT SAFE» نمونه‌ای از یک نوع رایج از اشکال UB را ارائه می‌کند: *r1 دارای طول عمر 'static است، بنابراین r3 دارای نوع &'static String است و بنابراین عمر s بیشتر می‌شود. ایجاد یک مرجع از یک اشاره گر نیاز به دقت بسیار دارد.