Needs a “2017” in the title, not that the situation has changed much since then.
I’m a little surprised the article doesn’t talk about the ownership model in Rust much. This does a lot to reduce bugs with multi-threaded code. Ada was designed in a world where multi-core processors were not common.
I do like the Ada / Spark feature of being able to define a range for a numeric type. And in general being able to define types (that may all compile down to a 32-bit int) to be distinct types. So you can’t just add a variable of type “meters” to another variable of type “feet” without going through a specific conversion process. In Rust, you can define two different types to be, for example, an isize, and they can be added / assigned with no problem.