the security is really not just memory safety from its lifetime & borrow checker.<p>it is that from language perspective, without writing unsafe, you won't have hit undefined behaviors, while provides same level performance of C++<p>even with unsafe code (usually needed because of performance need), there are very clear guidelines, and tooling (miri) to help check against undefined behaviors<p>the pain part of C++ is that i would never be confident enough to say i didn't write some undefined behaviors by mistake/accident, and requires extra tools like UBSAN in runtime to find them (C++'s miri)<p>however most of the time i don't need to run miri when writing rust, as they are slow for large enough project, unless i write unsafe, where it can be well scoped to be run with miri<p>another aspects rust put a lot efforts on is the soundness, that comes with the type system, that you know how to and when the code needs to handle errors when using someone else's code, so you never hit problems like NullException or silent racy conditions because thread safety comes with Send & Sync trait.<p>all these benefits just allow people to focus on the real problem, instead of wasting time on figuring out things like "oh this is undefined behavior", "oh it can return null in this case", "oh this function cannot be used in multithreading context", when the real problem to solve is something like "I need to send this trasaction to some background worker to be processed"