The difference is that semicolons have meaning in Rust, in contrast to other languages you have mentioned:
fn foo() -> usize { 0 }
fn bar() -> usize { 0; }
Will have behave differently (in fact, one will not compile at all).
My issue with Rust is ?
operator which changes flow of the application. TBH I would prefer it to be “coalesce operator”, so instead of:
let foo: Foo = a()?.b()?.c()?;
It would work like:
let foo: Option<Foo> = a()?.b()?.c();