The post is a Rust project goal document, not an approved language change. It sketches a path toward making “can this value ever move?” a property of the type with `!Move`, instead of expressing immobility indirectly through `Pin`, and pairs that with work on stronger destructor guarantees such as `!Forget` and possible must-destroy or linear patterns. The pitch is that Rust’s current model makes several useful patterns either impossible in safe code or wrapped in confusing escape hatches, especially self-referential types, scoped async tasks, and APIs where cleanup must happen exactly once.
The dominant read was that this targets a real hole in the language. Commenters were blunt that `Pin` has become notoriously hard to reason about because it mixes properties of pointers, pointees, and projection, and because it only solves part of the problem. The proposed shift to type-level immobility is seen as cleaner and broader. People also connected it to practical async pain. Rust can do scoped threads today, but not the async equivalent with the same safety guarantees, because futures can be cancelled and leaked in ways ordinary stack frames cannot. Guaranteed destructor execution is the piece that could finally make
structured concurrency and safe
scoped spawn work.
The excitement came with a lot of caveats. Several people stressed that this goal directly competes with the separate “pin ergonomics” effort, so Rust may be choosing between polishing `Pin` and eventually deprecating it. Others pointed out that the hard part is not the syntax but backward compatibility. If generic code implicitly assumes values are movable and forgettable, then standard traits like `Iterator`,
`Deref`, and collection APIs become minefields once `?Move` or `?Forget` enter the picture. That is why commenters kept circling back to associated types and edition boundaries as the real blockers. On guaranteed destructors, the consensus was that Rust is not trying to prove values can never be leaked in the absolute sense. The useful contract is narrower: if storage is actually reused or scope truly ends, destruction must run. That weaker guarantee is enough to unlock scoped async tasks and safer resource APIs without solving undecidable cases like every possible logical leak path.