I guess I like Rust (certainly more than I like C++), but I agree with you, and disagree with both sister comments, in that I think type systems do introduce artifacts which are then defended as &quot;the right thing actually if you think about it the way the type system does&quot; but they still are artifacts.<p>So today this helper function borrows one member and tomorrow it might need to borrow two, and every time you&#x27;re supposed to change the interface to explain exactly what&#x27;s happening. This is really tedious for a private helper and can be seriously problematic for a public interface, you don&#x27;t do it in garbage-collected languages (which move the issue from the static type system into the dynamic run time system) and you don&#x27;t do it in unsafe static languages (which move the issue from the static type system into your brain, which gets things right, some of the time.) The cost of moving it into the type system is as real as the benefit (not necessarily as big or small - it&#x27;s hard to quantify these things and you need context - but certainly just as real) and it&#x27;d be great to see both acknowledged instead of having one or the other denied.