>>106226362
The more expressive a language is the more confidence you can have when writing.
In ASM you have to worry about which registers are volatile, whether data is passed via stack or register, did you update the subtraction to the stack pointer to reflect the a change in stack usage of a function correctly or will a call erase some of your data?
In C you don't. It defines an abstraction of a function signature and just handles it automatically. You don't have to worry if someone forgot to pass an argument to it, or passed a wrong type. When you get an X it is always a sizeof(X), there is no half of X. The m1 in X is always at offsetof(X, m1), you can just use ./-> without worrying about fucking up the offset when an m0 is added/changes size.
But just like asm had things it couldn't express to be handled automatically, C has things it can't express too.
Rust can express more things than C, so it can be used with more confidence