4 ms·
Safe: Command::new("rm").args(&["-rf", "/"]).spawn() Unsafe: unsafe { 1 + 1 } Unsound: unsafe { &mut *(&1 as *const _ as *mut _) } Edit: Importantly, the non
by iudqnolq 6y ago
Safe: Command::new("rm").args(&["-rf", "/"]).spawn()
Unsafe: unsafe { 1 + 1 }
Unsound: unsafe { &mut *(&1 as *const _ as *mut _) }
Edit: Importantly, the non-unsafe example I posted also calls a bunch of unsafe code, as is necessary to do anything nontrivial (see https://github.com/rust-lang/rust/blob/master/library/std/src/sys/unix/process/process_unix.rs https://github.com/rust-lang/rust/blob/master/library/std/sr...). My point is that safe-good unsafe-bad is the wrong way to think about things. This is why you see experts on this (which I'm absolutely not) refer to unsafe code that violates the Rust Memory Model™ as unsound. (You may also find the fact the Rust Memory Model is more of a vibe than a standard surprising. How do you write sound code then? Try reasonable things and hope the compiler agrees with your definition of reasonable).