P.UNS.SAS.07 在抽象安全方法的同时,也建议为性能考虑而增加相应的 Unsafe 方法

【描述】

在 Rust 标准库中有很多后缀有 _unchecked 的方法,都对应一个没有该后缀的同名方法,比如 get() / get_unchecked()

【正例】


#![allow(unused)]
fn main() {
/// 假如调用环境可以保证地址是非空,那么可以使用这个 "_unchecked" 的函数
#[inline(always)]
unsafe fn io_read_u32_unchecked(ioaddr: usize) -> u32 {
    let val = ptr::read_volatile(ioaddr as *const u32);
    trace!("io_read_u32 {:#x}={:#x}", ioaddr, val);
    val
}

/// 安全抽象版本
#[inline(always)]
fn io_read_u32() -> Result<u32, MyError> {
    let ioaddr = ioaddr as * const u32;
    if ioaddr.is_null() {
        return Err(MyError::Content("io_read_u32 addr is null!"));
    }
    unsafe {
        let val = ptr::read_volatile(ioaddr);
        trace!("io_read_u32 {:#x}={:#x}", ioaddr, val);
        ok(val)
    }
}   
}