> a borrow checker
What exactly do you mean? How does it differ from any other language's type system?
> would also catch all data races at compile time
In Ada/SPARK, you can formally verify tasks, too. Please take a look at https://docs.adacore.com/spark2014-docs/html/ug/en/source/co... if you have some time!
> prevent memory mistakes.
Which mistakes are you referring to specifically? I need to know so I can have a meaningful response to it, but all I can say right now is that Ada/SPARK does the same.