Quando è necessario contrassegnare una funzione come unsafe
rispetto all'uso di un blocco unsafe
? Ho visto questa funzione durante la lettura another answer:Come si decide quando contrassegnare una funzione come non sicura?
unsafe fn as_u8_slice(xs: &[i32]) -> &[u8] {
std::slice::from_raw_parts(v.as_ptr() as *const u8,
v.len() * std::mem::size_of::<i32>())
}
probabilmente avrei scritto la funzione come:
fn as_u8_slice(xs: &[i32]) -> &[u8] {
unsafe {
std::slice::from_raw_parts(v.as_ptr() as *const u8,
v.len() * std::mem::size_of::<i32>())
}
}
Cioè, mi sento come chiamando la funzione è sicuro in tutti i casi, ma che cosa la funzione internamente non può essere verificata dal compilatore. Tuttavia, non ho regole per quando è opportuno usare l'una o l'altra.
il fatto che "chiamare la funzione è sicuro in tutti i casi" dovrebbe essere il criterio preciso. –