Das Rust-Ownership-System eliminiert ganze Kategorien von Bugs – Use-after-free, Double Free, Data Races – zur Kompilierzeit.
Ownership-Regeln¶
- Jeder Wert hat genau einen Owner
- Wenn der Owner den Scope verlaesst, wird der Wert freigegeben
- Ownership wird bei Zuweisung uebertragen (Move)
Move und Borrowing¶
fn main() { let s1 = String::from(“hello”); let s2 = s1; // s1 moved to s2, s1 nicht mehr gueltig! // Borrowing – Referenz let s3 = String::from(“world”); let len = calculate_length(&s3); // Immutable Borrow println!(“{s3} has length {len}”); // s3 noch gueltig // Mutable Borrow let mut s4 = String::from(“hello”); change(&mut s4); } fn calculate_length(s: &String) -> usize { s.len() } fn change(s: &mut String) { s.push_str(” world”); }
Borrowing-Regeln¶
- Beliebig viele immutable Referenzen (&T)
- ODER eine mutable Referenz (&mut T)
- Niemals beides gleichzeitig
- Referenzen muessen gueltig sein (Lifetimes)
Wichtigste Erkenntnis¶
Ownership = Memory Safety ohne GC. Move, Borrow (&), Mutable Borrow (&mut). Der Compiler ist Ihr Freund.