In C#, the language's syntax is defined so that every statement (thing which ends in a semicolon) needs to be a function call, increment/decrement, assignment, or an empty statement. On the other hand, in Rust every statement just needs to be an expression (something which evaluates to a value).
In this case, the echo in echo; is an expression that references the echo function.
…to expand on that: so this behavior is nice because if mentioning the name of the function would always call it automatically, then there would be no way to just pass the function itself around when that's what is needed.