How does Rust compare with Ada (and Spark)?

I am already familiar with Rust: in fact, I've already implemented something with it. I am also interested in Ada and, in particular, its more secure variation called "Spark", but I've never used them.

  1. What are the differences between the memory models of Rust and Ada (and Spark)?
  2. What are pros and cons of Rust and Ada (and Spark)?
    1. Which programming language is better at what?
  3. When should one language be used over the other?

I know that this is a forum dedicated to the Rust programming language, but try to be unbiased.

This has been discussed recently: If Ada is already *very* safe, why Rust?