توابع ناامن
فراخوانی متدهای ناامن
یک function یا method را میتوان unsafe
علامتگذاری کرد، اگر دارای پیششرطهای اضافی باشد که باید برای جلوگیری از رفتار نامشخص رعایت کنید:
نوشتن متدهای ناامن
اگر عملکردهای خود را برای جلوگیری از رفتار نامشخص به شرایط خاصی نیاز دارند، میتوانید بهعنوانunsafe
علامتگذاری کنید.
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 تغییر خواهد کرد.