I need to understand why and when Rust NIFs would be preferable to interacting with a Rust program via ports. I get that a NIF written in Rust is less likely to crash than one written in other languages, but it still seems like there’s risk of crashing the entire BEAM VM and ports would be a safer approach.