&gt;  there are many safe programs that the compiler rejects<p>It&#x27;s often less about being safe currently and more about being resilient to breaking after further changes in code. I&#x27;ve worked with some C++ codebases that rely on complicated invariants to be safe (so the code <i>looks</i> safe <i>now</i>), and stuff breaks down when certain changes are made. Programming with a C++11 style greatly reduces but does not eliminate this.<p>It takes a while to get a hang of this, but once you figure out the &quot;Rust way&quot; of moving data&#x2F;references around you tend to hit these errors very rarely. Of course, this takes time to learn which you may not have :)<p>But yes, there are things which Rust could improve upon here, like nonlexical scopes and SEME regions. Which may come soon.