Level of parallelism
Level 1 - memory unsafe and data races allowed
Languages where incorrect code can lead to corruption of the program state and segfaults. This includes C++ and Swift.
Level 2 - memory safe and data races allowed
Languages where parallelism is memory safe, but can still lead to data races. This includes Java and Go.
Level 3 - memory safe and no data races
Languages that enable fearless concurrency by eliminating unguarded access to shared-memory. This includes Clojure, Rust, and TCL.
Generally the closer you are Level 1 the more footguns there are, but the more performance you can squeeze out. The higher you go the easier concurrent code is to write, but you have less performance and control. The exception to this is Rust, which is a safe Level 3 language with the performance of a Level 1.