Skip to content
On this page

    Rust Ownership Rules Simplified

    1 min read

    Today I finally internalized Rust’s ownership rules. Here’s the simplified mental model that made it click:

    The Three Rules

    1. Each value has exactly one owner
    2. When the owner goes out of scope, the value is dropped
    3. You can have either ONE mutable reference OR any number of immutable references

    The Borrow Checker is Your Friend

    fn main() {
        let s1 = String::from("hello");
        let s2 = s1; // s1 is moved, can't use it anymore
    
        // This would fail:
        // println!("{}", s1);
    
        // But this works:
        println!("{}", s2);
    }

    References vs Ownership

    fn main() {
        let s = String::from("hello");
    
        // Borrowing with &
        let len = calculate_length(&s);
    
        // s is still valid here!
        println!("Length of '{}' is {}", s, len);
    }
    
    fn calculate_length(s: &String) -> usize {
        s.len()
    }

    The key insight: borrowing is temporary access without taking ownership.