Rust's second most complicated feature explained