پیاده سازی صفات (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) هستند.