توابع ناامن

فراخوانی متدهای ناامن

یک function یا method را می‌توان unsafe علامت‌گذاری کرد، اگر دارای پیش‌شرط‌های اضافی باشد که باید برای جلوگیری از رفتار نامشخص رعایت کنید:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

نوشتن متدهای ناامن

اگر عملکردهای خود را برای جلوگیری از رفتار نامشخص به شرایط خاصی نیاز دارند، می‌توانید به‌عنوانunsafe علامت‌گذاری کنید.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 5 minutes.

فراخوانی متدهای ناامن

تابع get_unchecked، مانند اکثر توابع _unchecked، ناامن است، زیرا اگر در محدوده نادرست باشد، می‌تواند یک UB ایجاد کند. abs به دلیل دیگری نادرست است: این یک تابع خارجی (FFI) است. فراخوانی توابع خارجی معمولاً زمانی مشکل‌ساز است که آن توابع کارهایی را با اشاره‌گرهایی انجام می‌دهند که ممکن است مدل حافظه Rust را نقض کنند، اما به طور کلی هر تابع C ممکن است تحت هر شرایط دلخواه رفتار نامشخصی داشته باشد.

زبان برنامه‌نویسی "C" در این مثال ABI است. ABIهای دیگر نیز در دسترس هستند.

نوشتن متدهای ناامن

ما در واقع از pointerها برای یک تابعswap استفاده نمی‌کنیم - این کار را می‌توان به‌طور ایمن با referenceها انجام داد.

توجه داشته باشید که کد ناامن در یک تابع ناامن بدون بلوک unsafe مجاز است. ما می‌توانیم این کار را با #[deny(unsafe_op_in_unsafe_fn)] غیرمجاز کنیم. سعی کنید آن را اضافه کنید و ببینید چه اتفاقی می افتد. این احتمالاً در نسخه بعدی Rust تغییر خواهد کرد.