Replies to my comment are questioning whether that was really a third or third-and-a-halfth option, but my point was that previously mainstream languages offered either memory managed by a run-time with an overhead (this includes ARC), or depended on diligence of the programmer to work correctly (Rust has copied C++ move semantics, but made moves automatic and checked).
Rust's ownership + borrowing instead of being somewhere on the axis of performance vs correctness trade-off, has traded off generality/flexibility instead (infamous for being unfit for doubly-linked lists). Unlike ARC, it works without a run-time, and on bare allocations and stack objects too. Unlike C++, it has zero-cost slices/substrings without a risk of dangling pointers.