Regarding compound statements returning values: There are a number of languages which have that, including Rust. Ironically, it made me wish for a reversed form of the construct, i.e. something like
{ ...; expr } --> x;
// x is a new variable initialized to expr
I feel like this would help readability when the compound statement is very large.