Remix.run Logo
▲ BitProgram 3 days ago

This article is written for Rust programmers learning C. As someone in the opposite position I know C and I've been curious about Rust I'd love to read the reverse. What's the hardest thing for a C programmer to unlearn when moving to Rust? Is it the borrow checker, or is that just the thing people talk about because it's the most visible?

▲elendilm 14 hours ago | parent [-]

In C, mostly you think about your code running on the machine with some thought dedicated to the compiler gymnastics involved during the compilation phase.

With Rust, you are front loaded with a myriad of compiler gymnastics you need to think through.

But once you get comfortable enough, it becomes natural. You also have to get accustomed to writing code that is more verbose than C which might look ugly at first but later you start to accommodate it as the necessary cost for the utility you are handed in return by the compiler.

For example, multiple variables in Rust doesn't necessarily mean multiple memory allocated variables at runtime like in C. The rust compiler will usually keep track of and ensure multiple variables (non Copy types such as String with Move semantics) map to one memory allocated variable at runtime (in normal single threaded use cases under normal circumstances without using RC, ARC, etc.). Eg: let a = String::from("hello"); let b = a; ... Note: The example is for illustration purposes only and not always true. In summary source code variables are abstractions and may not belong to distinct runtime memory location. Yes it is true even for C. But Rust's ownership model makes that distinction aggressively visible.