My preferred solution to shared mutable state is to reduce mutation (like Nix/Haskell) rather than reduce sharing (like Rust). My reasoning is immutability helps you scale horizontally (via parallelism) whereas mutability only scales vertically (via constant factor improvements)
Conversation
Replying to
Agreed, but I want more confidence that my immutable code will optimize down to in-place mutation where possible. Perhaps with linear types.

