C modern C++
"int foo[5]" -> "array<int,5> foo"
It's easy to criticize simple examples like the one above, since the C++ (or Rust) version is longer than the C declaration, but consider something like this: char *(*(**foo[][8])())[];
and the idiomatic Rust equivalent: let foo: Vec<[Option<fn() -> Vec<String>>; 8]> = Vec::new();
The later can be parsed quite trivially by descending into the type declaration. It's also visible at a glimpse, that the top-level type is a Vec and you can also easily spot the lambda and it's signature. Vec<[Option<fn() -> Vec<String>>; 8]>
While the standalone C type looks like this: char *(*(**[][8])())[]
which is quite a mess to untangle ;) var foo = new List<Func<List<string>>?[]>();
I can't deny that "?" is more ergonomic than Rust's "Option<T>", but C# has also a way less expressive type system than Rust or C++, so pick your poison.
looks inside:
> What this is NOT (yet): Running Vulkan programs