I have done a fair amount of Rust. The complexity is not in the borrow checker or lifetime. It’s in the combination explosion of the of generic, traits, lifetime, and constraints. When a struct takes on these, all functions and impls need to specify them. The amount of brackets becomes very distracting.