The languages are very different.
The languages are very different.
Also observe that Rust's drop flag is a form of (1-bit) reference counting.
In this particular area, they are more similar than different.
Similar perhaps, but not that similar.
Rc/Arc <-> class types
Raw pointers <-> UnsafePointer/UnsafeMutablePointer
References <-> inouts
Trait objects <-> Protocol objects
Box <-> indirect enum (arguably)
Did I miss any?
Of the core language features, protocol objects are the only case where Swift uses reference counting and Rust does not.
There's a big difference between technically having manual memory management and having it actually widely used and practical.
Using unsafe to improve performance is not unfamiliar in Rust either, though Rust gives you better tools for building safe abstractions around it.
Shared ownership is routine in UI programming - think event handlers, etc. These are the apps most commonly written in Swift. Does Rust avoid needing shared ownership for these types of apps? If so, how?
Is it? As I understand it, memory is handled primarily by the ownership system, and sometimes by reference counting. That doesn't seem to be manual memory management to me.
Borrow checker on the other hand doesn't alter lifetimes of objects, instead it doesn't allow you to keep references to things that were destroyed. I.e. it doesn't manage memory.