Actually I found that if you have a pretty good understanding of the core parts of the C standard (e.g. the idea of the abstract machine, storage durations, unspecified vs undefined behavior, etc.) and working experience with the language, Rust is then quite natural. To first approximation, Rust basically makes lifetime management/ownership semantics that would be "good practice" in C into mandatory parts of the type system.