Rust ownership, taught by the compiler's own errors
Rust ownership explained through real borrow-checker errors: E0382 use-after-move, E0502 borrow conflicts, E0597 dangling references, E0106 missing lifetimes. Every error message pasted verbatim from rustc, with the fix that compiles.