És az általad összerakott példán keresztül látod, amiről eddig beszéltünk. Ahhoz, hogy időprés vagy bármi miatt "trehány segfault-os kódot" írjál Rust-ban, nem hogy időt takarítasz meg ahogy a C-nél láttuk, hanem jelentős többletenergiát kell befektetned a "trehánysághoz".
Ajándékként mellékelem letisztázva:
use std::ffi::CString;
fn datagen() -> CString {
let p: *mut i8 = 0 as *mut i8;
unsafe { CString::from_raw(p) }
}
fn main() {
println!("s == {:?}", datagen());
}
A mezei halandó Rust programozó ezért vélhetőleg inkább az alábbit választja a fenti ffi:CString-es bajlódás helyett. Ráadásul időprés esetén is:
fn datagen() -> Option<String> {
None
}
És igen, ekkor a főprogramban vagy if let Some(x) vagy match segítségével le fogja kezelni. Mert az az egyszerűbb, gyorsabban lekódolható út számára.