The thing is rusts owner ship system doesn't "just" provide memory handling,
it provides reliable hard to get wrong resource handling for all kinds of resources.
To some degree for me this is *more* important then the memory handling aspects.
For example the whole "collection modified while iterating over it" situation can easily become a nightmare, especially for new programmers. It also does happen in non multi-threaded code all the time (if there are some "cross-cutting" concerns). In many GCed languages/libraries running into this situation is "safe" but unspecified. Worse if it happens to work in some situations (it often does) it's not rare for programmers to rely on this behaviour. That is until it gets subtitle broken due to other code changing, or the library changing. In rust this problem is not a thing, the borrow checker prevents you from accidentally running into it by accident. If you need it there are ways to still get it, but now with well define characteristics. So while this is initially more work, it is much much less bug prone and easier to maintain.
And that's just one example.
The borrow checker might be more initial work, but it often makes you write better, less buggy, easier to maintain code independent of memory management.
That is if you don't get over-obsessed with never cloning, never using Rc/Arc etc. then you are in for pain. Being over-obsessed with only using borrows is a form of premature optimizations. (As a side note even with clones/Rc/Arc the borrow checker still helps you as it's not the same as replacing it with a GC).
To some degree for me this is *more* important then the memory handling aspects.
For example the whole "collection modified while iterating over it" situation can easily become a nightmare, especially for new programmers. It also does happen in non multi-threaded code all the time (if there are some "cross-cutting" concerns). In many GCed languages/libraries running into this situation is "safe" but unspecified. Worse if it happens to work in some situations (it often does) it's not rare for programmers to rely on this behaviour. That is until it gets subtitle broken due to other code changing, or the library changing. In rust this problem is not a thing, the borrow checker prevents you from accidentally running into it by accident. If you need it there are ways to still get it, but now with well define characteristics. So while this is initially more work, it is much much less bug prone and easier to maintain.
And that's just one example.
The borrow checker might be more initial work, but it often makes you write better, less buggy, easier to maintain code independent of memory management.
That is if you don't get over-obsessed with never cloning, never using Rc/Arc etc. then you are in for pain. Being over-obsessed with only using borrows is a form of premature optimizations. (As a side note even with clones/Rc/Arc the borrow checker still helps you as it's not the same as replacing it with a GC).