پیاده سازی صفات (Traits) ناامن
مانند توابع، اگر پیادهسازی باید شرایط خاصی را تضمین کند تا از رفتار نامشخص جلوگیری شود، میتوانید یک ویژگی را بهعنوان unsafe
علامتگذاری کنید.
برای مثال، zerocopy
crate یک ویژگی ناامن دارد که چیزی شبیه به این است:
use std::mem::size_of_val; use std::slice; /// ... /// # Safety /// The type must have a defined representation and no padding. pub unsafe trait AsBytes { fn as_bytes(&self) -> &[u8] { unsafe { slice::from_raw_parts( self as *const Self as *const u8, size_of_val(self), ) } } } // SAFETY: `u32` has a defined representation and no padding. unsafe impl AsBytes for u32 {}
This slide should take about 5 minutes.
باید یک بخش # Safety
در Rustdoc برای این صفت (trait) وجود داشته باشد که شرایط لازم برای اجرای ایمن این trait را توضیح دهد.
بخش ایمنی واقعی برای AsBytes
نسبتا طولانیتر و پیچیدهتر است.
ویژگیهای داخلیSend
و Sync
ناامن (unsafe) هستند.