Bit of a "subtoot" but:
My biggest single frustration with Rust is that Result<> and Option<> are two things of fundamentally different kind. I wish Option<T> were literally just an alias for Result<T, ()>.
What Hurts about writing error-safe Rust is converting between kinds of errors. Rust needs better ergonomics for that. But the problem goes nuclear when you consider the entire extra layer of complexity needed to intraconvert Options and Results. ? has two different meanings and I hate it!