Rust is notoriously hard to learn, with lifetimes and the borrow checker being a big part of it. A friend of mine took Rust for a spin, and these are some of the things that he found made lifetimes particularly tough to grok.
https://ntietz.com/blog/rust-lifetimes-learning/
https://ntietz.com/blog/rust-lifetimes-learning/
Comments
in MIR, they become labelled 'lifetime blocks', which can drastically change performance in some cases
https://github.com/rust-lang/rust/blob/81d8edc2000aa38b08ad09fce22d90f1990b6459/compiler/rustc_mir_transform/src/promote_consts.rs#L110
https://doc.rust-lang.org/nomicon/subtyping.html
wikipedia has a lot, but is notably missing the duck-type polymorphism found in languages like zig (although i suppose you could say this is a form of subtype polymorphism)
i guess technically that's subtyping, with the type being "normal sized pointer"