Rust: āļžāļ·āđ‰āļ™āļāļēāļ™āļŠāļģāļŦāļĢāļąāļšāļ™āļąāļāļžāļąāļ’āļ™āļēāļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāđƒāļ™āļ›āļĩ 2026

āđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰ Rust āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĢāļ§āļ”āđ€āļĢāđ‡āļ§āđ‚āļ”āļĒāļ­āļēāļĻāļąāļĒāļ„āļ§āļēāļĄāļĢāļđāđ‰āļ”āđ‰āļēāļ™āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆ Ownership, borrowing, lifetimes āđāļĨāļ° pattern āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ­āļ˜āļīāļšāļēāļĒāđ„āļ§āđ‰āļŠāļģāļŦāļĢāļąāļšāļ™āļąāļāļžāļąāļ’āļ™āļēāļ—āļĩāđˆāļĄāļēāļˆāļēāļ C++, Java āļŦāļĢāļ·āļ­ Python

āļ„āļđāđˆāļĄāļ·āļ­ Rust āļŠāļģāļŦāļĢāļąāļšāļ™āļąāļāļžāļąāļ’āļ™āļēāļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒ

Rust āļĒāļąāļ‡āļ„āļ‡āđ„āļ”āđ‰āļĢāļąāļšāļ„āļ§āļēāļĄāļ™āļīāļĒāļĄāđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡āđƒāļ™āļ—āļļāļāļ›āļĩ āđāļĨāļ°āđ€āļŦāļ•āļļāļœāļĨāļ™āļąāđ‰āļ™āļŠāļąāļ”āđ€āļˆāļ™: āļāļēāļĢāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāđƒāļ™āđ€āļ§āļĨāļēāļ„āļ­āļĄāđ„āļžāļĨāđŒ āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļĢāļ°āļ”āļąāļšāđ€āļ”āļĩāļĒāļ§āļāļąāļš C++ āđāļĨāļ°āļĢāļ°āļšāļšāļ™āļīāđ€āļ§āļĻāļ—āļĩāđˆāļ—āļąāļ™āļŠāļĄāļąāļĒ āļŠāļģāļŦāļĢāļąāļšāļ™āļąāļāļžāļąāļ’āļ™āļēāļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāļˆāļēāļ C++, Java āļŦāļĢāļ·āļ­ Python āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰ Rust āļ­āļēāļˆāļĢāļđāđ‰āļŠāļķāļāļŠāļąāļšāļŠāļ™āđƒāļ™āļ•āļ­āļ™āđāļĢāļ āđāļ•āđˆāđāļ™āļ§āļ„āļīāļ”āļžāļ·āđ‰āļ™āļāļēāļ™āļˆāļ°āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāđƒāļˆāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ›āđ‡āļ™āļ˜āļĢāļĢāļĄāļŠāļēāļ•āļīāđ€āļĄāļ·āđˆāļ­āđ€āļ‚āđ‰āļēāđƒāļˆāļ­āļĒāđˆāļēāļ‡āļ–āđˆāļ­āļ‡āđāļ—āđ‰āđāļĨāđ‰āļ§

āļ—āļģāđ„āļĄāļ•āđ‰āļ­āļ‡ Rust āđƒāļ™āļ›āļĩ 2026?

Rust āļ„āļĢāļ­āļ‡āļ•āļģāđāļŦāļ™āđˆāļ‡āļ āļēāļĐāļēāļ—āļĩāđˆāļ™āļąāļāļžāļąāļ’āļ™āļēāļŠāļ·āđˆāļ™āļŠāļ­āļšāļĄāļēāļāļ—āļĩāđˆāļŠāļļāļ”āļšāļ™ Stack Overflow āļ•āļīāļ”āļ•āđˆāļ­āļāļąāļ™ 8 āļ›āļĩ āļ–āļđāļāļ™āļģāđ„āļ›āđƒāļŠāđ‰āđ‚āļ”āļĒ Microsoft, Google, Amazon āđāļĨāļ° Meta āļŠāļģāļŦāļĢāļąāļšāļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļšāļ—āļĩāđˆāļŠāļģāļ„āļąāļ Rust āļĄāļ­āļšāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰ garbage collector

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ Rust

āļāđˆāļ­āļ™āđ€āļĢāļīāđˆāļĄāđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ” āļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āļ•āļīāļ”āļ•āļąāđ‰āļ‡ Rust āļœāđˆāļēāļ™ rustup āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļˆāļąāļ”āļāļēāļĢāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ­āļĒāđˆāļēāļ‡āđ€āļ›āđ‡āļ™āļ—āļēāļ‡āļāļēāļĢ

bash
# install.sh
# Install Rust via rustup (macOS, Linux)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Verify installation
rustc --version
cargo --version

Cargo āļ„āļ·āļ­āļ•āļąāļ§āļˆāļąāļ”āļāļēāļĢāđāļžāđ‡āļāđ€āļāļˆāđāļĨāļ°āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ build āļ‚āļ­āļ‡ Rust āđ‚āļ”āļĒ Cargo āļĢāļ§āļĄāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡ npm, Maven āđāļĨāļ° Make āđ„āļ§āđ‰āđƒāļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđ€āļ”āļĩāļĒāļ§āļ—āļĩāđˆāļŠāļ­āļ”āļ„āļĨāđ‰āļ­āļ‡āļāļąāļ™

bash
# project-setup.sh
# Create a new project
cargo new my_project
cd my_project

# Generated structure:
# my_project/
# ├── Cargo.toml    # Manifest (like package.json)
# └── src/
#     └── main.rs   # Entry point

# Essential commands
cargo build          # Compile the project
cargo run            # Compile and run
cargo test           # Run tests
cargo check          # Check without building (faster)

āļ•āļąāļ§āđāļ›āļĢāđāļĨāļ°āļ„āļ§āļēāļĄāđ„āļĄāđˆāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđ‚āļ”āļĒāļ„āđˆāļēāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™

Rust āļāļĨāļąāļšāļ”āđ‰āļēāļ™āđāļ™āļ§āļ›āļāļīāļšāļąāļ•āļīāļ—āļąāđˆāļ§āđ„āļ›: āļ•āļąāļ§āđāļ›āļĢāđ€āļ›āđ‡āļ™ immutable āđ‚āļ”āļĒāļ„āđˆāļēāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™ āđāļ™āļ§āļ—āļēāļ‡āļ™āļĩāđ‰āļšāļąāļ‡āļ„āļąāļšāđƒāļŦāđ‰āļ™āļąāļāļžāļąāļ’āļ™āļēāļ„āļīāļ”āļ­āļĒāđˆāļēāļ‡āļŠāļąāļ”āđ€āļˆāļ™āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš mutability āđāļĨāļ°āļ›āđ‰āļ­āļ‡āļāļąāļ™āļšāļąāđŠāļāđ„āļ”āđ‰āļŦāļĨāļēāļĒāļ›āļĢāļ°āđ€āļ āļ—

variables.rsrust
fn main() {
    // Immutable by default
    let x = 5;
    // x = 6;  // Compile error!

    // Explicitly mutable variable
    let mut y = 5;
    y = 6;  // OK

    // Shadowing: redeclaration in the same scope
    let x = x + 1;  // Creates a new variable x
    let x = x * 2;  // x is now 12

    // Shadowing also allows changing the type
    let spaces = "   ";         // &str
    let spaces = spaces.len();  // usize
}
Shadowing āļāļąāļš Mutability

Shadowing āļŠāļĢāđ‰āļēāļ‡āļ•āļąāļ§āđāļ›āļĢāđƒāļŦāļĄāđˆ āļ‹āļķāđˆāļ‡āļ•āđˆāļēāļ‡āļˆāļēāļ mut āļ—āļĩāđˆāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ„āđˆāļēāļ‚āļ­āļ‡āļ•āļąāļ§āđāļ›āļĢāđ€āļ”āļīāļĄ Shadowing āļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰āđāļ›āļĨāļ‡āļ„āđˆāļēāđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆāļĒāļąāļ‡āļ„āļ‡āļĢāļąāļāļĐāļēāļŠāļ·āđˆāļ­āļ•āļąāļ§āđāļ›āļĢāļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™āđ„āļ§āđ‰āđ„āļ”āđ‰

āļŠāļ™āļīāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāļžāļ·āđ‰āļ™āļāļēāļ™

Rust āđ€āļ›āđ‡āļ™āļ āļēāļĐāļēāđāļšāļš statically typed āļ—āļĩāđˆāļĄāļĩāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ­āļ™āļļāļĄāļēāļ™āļŠāļ™āļīāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļĒāļ­āļ”āđ€āļĒāļĩāđˆāļĒāļĄ āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļ„āļ·āļ­āļŠāļ™āļīāļ”āļ‚āđ‰āļ­āļĄāļđāļĨ primitive āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āļĢāļđāđ‰

types.rsrust
fn main() {
    // Signed integers: i8, i16, i32, i64, i128, isize
    let age: i32 = 30;

    // Unsigned integers: u8, u16, u32, u64, u128, usize
    let count: u64 = 1_000_000;  // Underscores for readability

    // Floats: f32, f64 (default)
    let pi: f64 = 3.14159;

    // Boolean
    let active: bool = true;

    // Unicode character (4 bytes)
    let emoji: char = 'ðŸĶ€';

    // Tuple: fixed collection of different types
    let person: (String, i32) = (String::from("Alice"), 28);
    let (name, age) = person;  // Destructuring

    // Array: fixed size, same type
    let numbers: [i32; 5] = [1, 2, 3, 4, 5];
    let first = numbers[0];

    // Slice: view into a portion of data
    let slice: &[i32] = &numbers[1..4];  // [2, 3, 4]
}

Ownership: āđāļ™āļ§āļ„āļīāļ”āļ—āļĩāđˆāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ§āļ‡āļāļēāļĢ

Ownership āļ„āļ·āļ­āļ™āļ§āļąāļ•āļāļĢāļĢāļĄāļŦāļĨāļąāļāļ‚āļ­āļ‡ Rust āļĢāļ°āļšāļšāļ™āļĩāđ‰āļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰ garbage collector āđāļĨāļāļāļąāļšāđ€āļŠāđ‰āļ™āļ—āļēāļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđƒāļ™āļŠāđˆāļ§āļ‡āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™

āļāļŽāļŠāļēāļĄāļ‚āđ‰āļ­āļ‚āļ­āļ‡ Ownership

ownership.rsrust
fn main() {
    // Rule 1: Each value has a single owner
    let s1 = String::from("hello");

    // Rule 2: When the owner goes out of scope, the value is freed
    {
        let s2 = String::from("world");
        // s2 is valid here
    }
    // s2 is dropped, no longer accessible

    // Rule 3: Only one ownership at a time (move)
    let s3 = s1;  // s1 is MOVED to s3
    // println!("{}", s1);  // Error: s1 is no longer valid!
    println!("{}", s3);     // OK: s3 is the owner
}

Move āđāļĨāļ° Clone

move_clone.rsrust
fn main() {
    // Simple types (stack): automatic Copy
    let x = 5;
    let y = x;  // Copy, not move
    println!("x = {}, y = {}", x, y);  // Both are valid

    // Complex types (heap): Move by default
    let s1 = String::from("hello");
    let s2 = s1;  // Move
    // s1 is no longer usable

    // Explicit clone to duplicate
    let s3 = String::from("world");
    let s4 = s3.clone();  // Deep copy
    println!("s3 = {}, s4 = {}", s3, s4);  // Both valid
}
Move āļāļąāļšāļŸāļąāļ‡āļāđŒāļŠāļąāļ™

āļāļēāļĢāļŠāđˆāļ‡āļ„āđˆāļēāđ„āļ›āļĒāļąāļ‡āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļˆāļ°āļ—āļģāđƒāļŦāđ‰ ownership āļ–āļđāļāđ‚āļ­āļ™āļĒāđ‰āļēāļĒ āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļˆāļ°āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āđ€āļˆāđ‰āļēāļ‚āļ­āļ‡ āđāļĨāļ°āļ„āđˆāļēāļ™āļąāđ‰āļ™āļˆāļ°āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āļŦāļĨāļąāļ‡āļˆāļēāļāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰ āđ€āļ§āđ‰āļ™āđāļ•āđˆāļˆāļ°āļ–āļđāļāļŠāđˆāļ‡āļ„āļ·āļ™

ownership_functions.rsrust
fn main() {
    let s = String::from("hello");
    takes_ownership(s);
    // println!("{}", s);  // Error: s has been moved

    let x = 5;
    makes_copy(x);
    println!("{}", x);  // OK: i32 implements Copy

    // To regain ownership, return the value
    let s2 = String::from("hello");
    let s3 = takes_and_gives_back(s2);
    println!("{}", s3);  // OK
}

fn takes_ownership(s: String) {
    println!("{}", s);
}  // s is dropped here

fn makes_copy(x: i32) {
    println!("{}", x);
}

fn takes_and_gives_back(s: String) -> String {
    s  // Returns ownership
}

Borrowing: āļāļēāļĢāļ­āđ‰āļēāļ‡āļ­āļīāļ‡āđ‚āļ”āļĒāđ„āļĄāđˆāđ‚āļ­āļ™āļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āđ€āļˆāđ‰āļēāļ‚āļ­āļ‡

Borrowing āļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰āđƒāļŠāđ‰āļ„āđˆāļēāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĢāļąāļš ownership āļāļĨāđ„āļāļ™āļĩāđ‰āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļ—āļĩāđˆāļ–āļđāļāđƒāļŠāđ‰āļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™ Rust

borrowing.rsrust
fn main() {
    let s1 = String::from("hello");

    // Immutable reference: read-only
    let len = calculate_length(&s1);
    println!("Length of '{}': {}", s1, len);  // s1 still valid

    // Mutable reference: modification allowed
    let mut s2 = String::from("hello");
    change(&mut s2);
    println!("{}", s2);  // "hello, world"
}

fn calculate_length(s: &String) -> usize {
    s.len()
}  // s goes out of scope but doesn't drop (it's a reference)

fn change(s: &mut String) {
    s.push_str(", world");
}

āļāļŽāļ‚āļ­āļ‡ Borrowing

borrowing_rules.rsrust
fn main() {
    let mut s = String::from("hello");

    // Rule 1: Multiple immutable references simultaneously OK
    let r1 = &s;
    let r2 = &s;
    println!("{} and {}", r1, r2);

    // Rule 2: ONLY ONE mutable reference at a time
    let r3 = &mut s;
    // let r4 = &mut s;  // Error: already borrowed mutably
    println!("{}", r3);

    // Rule 3: No mutable ref if immutable ref exists
    let r5 = &s;
    // let r6 = &mut s;  // Error: r5 is still active
    println!("{}", r5);

    // Once r5 is used for the last time, mutable borrow is allowed
    let r7 = &mut s;  // OK: r5 is no longer used after this
    r7.push_str("!");
}

āļžāļĢāđ‰āļ­āļĄāļ—āļĩāđˆāļˆāļ°āļžāļīāļŠāļīāļ•āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Rust āđāļĨāđ‰āļ§āļŦāļĢāļ·āļ­āļĒāļąāļ‡āļ„āļĢāļąāļš?

āļāļķāļāļāļ™āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āđāļšāļšāđ‚āļ•āđ‰āļ•āļ­āļš, flashcards āđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

Lifetimes: āļāļēāļĢāļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡āļ‚āļ­āļ‡āļāļēāļĢāļ­āđ‰āļēāļ‡āļ­āļīāļ‡

Lifetimes āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļĄāļąāđˆāļ™āđƒāļˆāļ§āđˆāļē reference āļĒāļąāļ‡āļ„āļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡ āļ„āļ­āļĄāđ„āļžāđ€āļĨāļ­āļĢāđŒāļĄāļąāļāļˆāļ°āļ­āļ™āļļāļĄāļēāļ™āđ„āļ”āđ‰āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđāļ•āđˆāļšāļēāļ‡āļ„āļĢāļąāđ‰āļ‡āļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āļĄāļĩāļāļēāļĢāļĢāļ°āļšāļļ annotation āļ­āļĒāđˆāļēāļ‡āļŠāļąāļ”āđ€āļˆāļ™

lifetimes_basic.rsrust
// Classic error: reference to freed data
// fn dangling() -> &String {
//     let s = String::from("hello");
//     &s  // Error: s will be dropped, invalid reference!
// }

// Solution: return the owned value
fn no_dangle() -> String {
    let s = String::from("hello");
    s  // Ownership transferred, no problem
}

Lifetime Annotations

lifetimes_annotation.rsrust
// The compiler can't figure out which reference will be returned
// fn longest(x: &str, y: &str) -> &str { ... }  // Error!

// Explicit annotation: return lives as long as BOTH x AND y
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn main() {
    let string1 = String::from("long string");
    let result;
    {
        let string2 = String::from("xyz");
        result = longest(&string1, &string2);
        println!("Longest: {}", result);  // OK here
    }
    // println!("{}", result);  // Error: string2 dropped
}
āļāļŽāļāļēāļĢāļĨāļ°āđ€āļ§āđ‰āļ™ Lifetime (Lifetime Elision)

Rust āđƒāļŠāđ‰āļāļŽ elision āđ€āļžāļ·āđˆāļ­āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™ annotation āđƒāļ™āļāļĢāļ“āļĩāļ—āļĩāđˆāđ„āļĄāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™ āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™ āļāļēāļĢāļ—āļģāļ•āļēāļĄāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™āļˆāļēāļāļ„āļ­āļĄāđ„āļžāđ€āļĨāļ­āļĢāđŒāļ–āļ·āļ­āļ§āđˆāļēāđ€āļžāļĩāļĒāļ‡āļžāļ­

Struct āđāļĨāļ° Implementation

Struct āđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļ›āļĢāļ°āļāļ­āļšāļžāļ·āđ‰āļ™āļāļēāļ™āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļŠāļ™āļīāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāļāļģāļŦāļ™āļ”āđ€āļ­āļ‡āđƒāļ™ Rust

structs.rsrust
// Struct definition
#[derive(Debug)]  // Enables printing with {:?}
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

// Implementation block for methods
impl User {
    // Constructor (convention: fn new or descriptive name)
    fn new(username: String, email: String) -> Self {
        Self {
            username,
            email,
            active: true,
            sign_in_count: 1,
        }
    }

    // Method: takes &self (reference to instance)
    fn is_active(&self) -> bool {
        self.active
    }

    // Method with mutation: takes &mut self
    fn deactivate(&mut self) {
        self.active = false;
    }

    // Method consuming self (rare)
    fn into_username(self) -> String {
        self.username
    }
}

fn main() {
    let mut user = User::new(
        String::from("alice"),
        String::from("alice@example.com"),
    );

    println!("Active: {}", user.is_active());
    user.deactivate();
    println!("Active: {}", user.is_active());

    // Debug print
    println!("{:?}", user);
}

Enum āđāļĨāļ° Pattern Matching

Enum āđƒāļ™ Rust āļ—āļĢāļ‡āļžāļĨāļąāļ‡āļāļ§āđˆāļēāļ āļēāļĐāļēāļŠāđˆāļ§āļ™āđƒāļŦāļāđˆāļ­āļĒāđˆāļēāļ‡āļĄāļēāļ āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđāļ•āđˆāļĨāļ° variant āļŠāļēāļĄāļēāļĢāļ–āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰

enums.rsrust
// Simple enum
enum Direction {
    North,
    South,
    East,
    West,
}

// Enum with data (algebraic data type)
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(u8, u8, u8),
}

impl Message {
    fn process(&self) {
        match self {
            Message::Quit => println!("Quitting"),
            Message::Move { x, y } => println!("Moving to ({}, {})", x, y),
            Message::Write(text) => println!("Writing: {}", text),
            Message::ChangeColor(r, g, b) => {
                println!("Color: rgb({}, {}, {})", r, g, b)
            }
        }
    }
}

fn main() {
    let msg = Message::Move { x: 10, y: 20 };
    msg.process();

    let msg2 = Message::Write(String::from("Hello Rust!"));
    msg2.process();
}

Option āđāļĨāļ° Result: āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”

option_result.rsrust
use std::fs::File;
use std::io::{self, Read};

fn main() {
    // Option<T>: present or absent value (replaces null)
    let numbers = vec![1, 2, 3];
    let first: Option<&i32> = numbers.first();

    match first {
        Some(n) => println!("First: {}", n),
        None => println!("Empty list"),
    }

    // Utility methods
    let value = first.unwrap_or(&0);
    let doubled = first.map(|n| n * 2);

    // Result<T, E>: success or error
    let result = read_file("config.txt");
    match result {
        Ok(content) => println!("Content: {}", content),
        Err(e) => println!("Error: {}", e),
    }
}

fn read_file(path: &str) -> Result<String, io::Error> {
    let mut file = File::open(path)?;  // ? propagates the error
    let mut content = String::new();
    file.read_to_string(&mut content)?;
    Ok(content)
}
āļ•āļąāļ§āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ ?

āļ•āļąāļ§āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ ? āđ€āļ›āđ‡āļ™ syntactic sugar āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ” āļ•āļąāļ§āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ™āļĩāđ‰āļˆāļ°āļŠāđˆāļ‡āļ„āļ·āļ™āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāļŦāļēāļ Result āđ€āļ›āđ‡āļ™ Err āđāļĨāļ°āļˆāļ° unwrap āļ„āđˆāļē Ok āđƒāļ™āļāļĢāļ“āļĩāļ—āļĩāđˆāļŠāļģāđ€āļĢāđ‡āļˆ

Trait: Polymorphism āđāļšāļš Rust

Trait āļāļģāļŦāļ™āļ”āļžāļĪāļ•āļīāļāļĢāļĢāļĄāļ—āļĩāđˆāđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļ™ āļ„āļĨāđ‰āļēāļĒāļāļąāļš interface āđƒāļ™ Java āļŦāļĢāļ·āļ­ protocol āđƒāļ™ Swift

traits.rsrust
// Trait definition
trait Summary {
    fn summarize(&self) -> String;

    // Method with default implementation
    fn preview(&self) -> String {
        format!("{}...", &self.summarize()[..50.min(self.summarize().len())])
    }
}

struct Article {
    title: String,
    author: String,
    content: String,
}

struct Tweet {
    username: String,
    content: String,
}

// Implementation for Article
impl Summary for Article {
    fn summarize(&self) -> String {
        format!("{} by {}", self.title, self.author)
    }
}

// Implementation for Tweet
impl Summary for Tweet {
    fn summarize(&self) -> String {
        format!("@{}: {}", self.username, self.content)
    }
}

// Function accepting any type implementing Summary
fn notify(item: &impl Summary) {
    println!("Breaking news: {}", item.summarize());
}

// Equivalent syntax with trait bound
fn notify_generic<T: Summary>(item: &T) {
    println!("Breaking news: {}", item.summarize());
}

fn main() {
    let article = Article {
        title: String::from("Rust 2026"),
        author: String::from("Community"),
        content: String::from("..."),
    };

    let tweet = Tweet {
        username: String::from("rustlang"),
        content: String::from("Rust is awesome!"),
    };

    notify(&article);
    notify(&tweet);
}

Collection āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™

Rust āļĄāļĩ collection āļ—āļĩāđˆāļ—āļĢāļ‡āļžāļĨāļąāļ‡āđƒāļ™ standard library

collections.rsrust
use std::collections::HashMap;

fn main() {
    // Vec<T>: dynamic array
    let mut numbers: Vec<i32> = Vec::new();
    numbers.push(1);
    numbers.push(2);
    numbers.push(3);

    // vec! macro for initialization
    let nums = vec![1, 2, 3, 4, 5];

    // Iteration
    for n in &nums {
        println!("{}", n);
    }

    // Functional methods
    let doubled: Vec<i32> = nums.iter().map(|x| x * 2).collect();
    let sum: i32 = nums.iter().sum();
    let evens: Vec<&i32> = nums.iter().filter(|x| *x % 2 == 0).collect();

    // String: growable UTF-8 string
    let mut s = String::from("Hello");
    s.push_str(", World!");
    s.push('!');

    // Concatenation
    let s1 = String::from("Hello, ");
    let s2 = String::from("World!");
    let s3 = s1 + &s2;  // s1 moved, s2 borrowed
    // or with format!
    let s4 = format!("{}{}", "Hello, ", "World!");

    // HashMap<K, V>
    let mut scores: HashMap<String, i32> = HashMap::new();
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Red"), 50);

    // Access with get (returns Option)
    if let Some(score) = scores.get("Blue") {
        println!("Blue: {}", score);
    }

    // Entry API for conditional insertion
    scores.entry(String::from("Yellow")).or_insert(25);
}

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ§āļīāļ˜āļĩ

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļˆāļģāđ€āļ›āđ‡āļ™āđƒāļ™ Rust āļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļ„āļ·āļ­ pattern āļ—āļĩāđˆāđāļ™āļ°āļ™āļģ

error_handling.rsrust
use std::fs::File;
use std::io::{self, Read};
use std::num::ParseIntError;

// Define a custom error type
#[derive(Debug)]
enum AppError {
    Io(io::Error),
    Parse(ParseIntError),
    Custom(String),
}

// Implement From for automatic conversion
impl From<io::Error> for AppError {
    fn from(err: io::Error) -> Self {
        AppError::Io(err)
    }
}

impl From<ParseIntError> for AppError {
    fn from(err: ParseIntError) -> Self {
        AppError::Parse(err)
    }
}

// Function returning Result with custom error
fn read_number_from_file(path: &str) -> Result<i32, AppError> {
    let mut file = File::open(path)?;  // io::Error -> AppError
    let mut content = String::new();
    file.read_to_string(&mut content)?;
    let number: i32 = content.trim().parse()?;  // ParseIntError -> AppError
    Ok(number)
}

fn main() {
    match read_number_from_file("number.txt") {
        Ok(n) => println!("Number: {}", n),
        Err(AppError::Io(e)) => println!("IO error: {}", e),
        Err(AppError::Parse(e)) => println!("Parse error: {}", e),
        Err(AppError::Custom(msg)) => println!("Error: {}", msg),
    }
}
Crate āļ—āļĩāđˆāđāļ™āļ°āļ™āļģ

āļŠāļģāļŦāļĢāļąāļšāđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒāļˆāļĢāļīāļ‡ crate thiserror (āļŠāļģāļŦāļĢāļąāļš library) āđāļĨāļ° anyhow (āļŠāļģāļŦāļĢāļąāļš application) āļŠāđˆāļ§āļĒāļĨāļ”āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļēāļ

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđƒāļ™ Rust

Rust āļĄāļĩ testing framework āđƒāļ™āļ•āļąāļ§āļ—āļĩāđˆāļ–āļđāļāļĢāļ§āļĄāđ€āļ‚āđ‰āļēāļāļąāļšāļ āļēāļĐāļēāđ‚āļ”āļĒāļ•āļĢāļ‡

lib.rsrust
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

pub fn divide(a: i32, b: i32) -> Result<i32, String> {
    if b == 0 {
        Err(String::from("Division by zero"))
    } else {
        Ok(a / b)
    }
}

// Test module (compiled only for `cargo test`)
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_add() {
        assert_eq!(add(2, 3), 5);
    }

    #[test]
    fn test_add_negative() {
        assert_eq!(add(-1, 1), 0);
    }

    #[test]
    fn test_divide_success() {
        assert_eq!(divide(10, 2), Ok(5));
    }

    #[test]
    fn test_divide_by_zero() {
        assert!(divide(10, 0).is_err());
    }

    #[test]
    #[should_panic(expected = "index out of bounds")]
    fn test_panic() {
        let v = vec![1, 2, 3];
        let _ = v[99];  // Panic!
    }
}

āļšāļ—āļŠāļĢāļļāļ›

Rust āļ™āļģāđ€āļŠāļ™āļ­āđāļ™āļ§āļ„āļīāļ”āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āđ€āļ­āļāļĨāļąāļāļĐāļ“āđŒāļ‹āļķāđˆāļ‡āļœāļŠāļĄāļœāļŠāļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāđ€āļ‚āđ‰āļēāļāļąāļšāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡ āđāļ™āļ§āļ„āļīāļ” ownership āđāļĨāļ° borrowing āļ­āļēāļˆāļĢāļđāđ‰āļŠāļķāļāļˆāļģāļāļąāļ”āđƒāļ™āļ•āļ­āļ™āđāļĢāļ āđāļ•āđˆāļˆāļ°āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ˜āļĢāļĢāļĄāļŠāļēāļ•āļīāđ€āļĄāļ·āđˆāļ­āļāļķāļāļāļ™āļ­āļĒāđˆāļēāļ‡āļŠāļĄāđˆāļģāđ€āļŠāļĄāļ­ āļ„āļ­āļĄāđ„āļžāđ€āļĨāļ­āļĢāđŒāļ‚āļ­āļ‡ Rust āđ€āļ›āđ‡āļ™āļœāļđāđ‰āļŠāđˆāļ§āļĒāļ—āļĩāđˆāļĨāđ‰āļģāļ„āđˆāļē āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”āļ‚āļ­āļ‡ Rust āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļĒāļ­āļĄāļĢāļąāļšāļ§āđˆāļēāđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āļ­āļļāļ•āļŠāļēāļŦāļāļĢāļĢāļĄ

āļĢāļēāļĒāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™

  • āļ•āļīāļ”āļ•āļąāđ‰āļ‡ Rust āļœāđˆāļēāļ™ rustup āđāļĨāļ°āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļāļāļēāļĢāđƒāļŠāđ‰ Cargo
  • āđ€āļ‚āđ‰āļēāđƒāļˆāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ immutability āļāļąāļš explicit mutability
  • āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļāļāļŽāļŠāļēāļĄāļ‚āđ‰āļ­āļ‚āļ­āļ‡ ownership
  • āļāļķāļāļāļ™ borrowing āļ”āđ‰āļ§āļĒ reference & āđāļĨāļ° &mut
  • āđƒāļŠāđ‰ Option āđāļĨāļ° Result āđāļ—āļ™ null āđāļĨāļ° exception
  • āđ€āļ‚āļĩāļĒāļ™ test āļ”āđ‰āļ§āļĒ #[test]

āđ€āļĢāļīāđˆāļĄāļāļķāļāļ‹āđ‰āļ­āļĄāđ€āļĨāļĒ!

āļ—āļ”āļŠāļ­āļšāļ„āļ§āļēāļĄāļĢāļđāđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āļŠāļļāļĄāļŠāļ™ Rust āđ€āļ›āđ‡āļ™āļŠāļļāļĄāļŠāļ™āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļĄāļīāļ•āļĢāđāļĨāļ°āļĄāļĩāļ—āļĢāļąāļžāļĒāļēāļāļĢāļāļēāļĢāđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļ­āļĒāđˆāļēāļ‡āļ­āļļāļ”āļĄāļŠāļĄāļšāļđāļĢāļ“āđŒ āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļ—āļēāļ‡āļāļēāļĢ "The Rust Programming Language" āļŠāļēāļĄāļēāļĢāļ–āļ­āđˆāļēāļ™āđ„āļ”āđ‰āļŸāļĢāļĩāļ—āļēāļ‡āļ­āļ­āļ™āđ„āļĨāļ™āđŒ āļ”āđ‰āļ§āļĒāļžāļ·āđ‰āļ™āļāļēāļ™āļ—āļĩāđˆāđāļ‚āđ‡āļ‡āđāļāļĢāđˆāļ‡āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰ āļ™āļąāļāļžāļąāļ’āļ™āļēāļˆāļ°āļžāļĢāđ‰āļ­āļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļģāļĢāļ§āļˆāļŦāļąāļ§āļ‚āđ‰āļ­āļ‚āļąāđ‰āļ™āļŠāļđāļ‡ āđ€āļŠāđˆāļ™ async/await, macro āđāļĨāļ° WebAssembly

Anthony Fillion-Maillet

āđ€āļ‚āļĩāļĒāļ™āđ‚āļ”āļĒ

Anthony Fillion-Maillet

āļ™āļąāļāļžāļąāļ’āļ™āļēāļŸāļđāļĨāļŠāđāļ•āļ āļœāļđāđ‰āļāđˆāļ­āļ•āļąāđ‰āļ‡ SharpSkill

āđ€āļ›āđ‡āļ™āļ™āļąāļāļžāļąāļ’āļ™āļēāļŸāļđāļĨāļŠāđāļ•āļāļĄāļēāļāļ§āđˆāļē 10 āļ›āļĩ āļ”āļđāđāļĨ SharpSkill āđāļĨāļ°āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ—āļļāļāļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļœāļĒāđāļžāļĢāđˆāļ—āļĩāđˆāļ™āļĩāđˆ

āļ­āļąāļ›āđ€āļ”āļ•āđ€āļĄāļ·āđˆāļ­ 1 āđ€āļĄāļĐāļēāļĒāļ™ 2569

āđāļ—āđ‡āļ

#rust
#systems programming
#ownership
#memory safety
#performance

āđāļŠāļĢāđŒ

āļšāļ—āļ„āļ§āļēāļĄāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡

Ownership āđāļĨāļ° Borrowing āđƒāļ™ Rust - āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒ

Ownership āđāļĨāļ° Borrowing āđƒāļ™ Rust: āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒ

āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļāļĢāļ°āļšāļš ownership āđāļĨāļ° borrowing āļ‚āļ­āļ‡ Rust āļāļŽāļ„āļ§āļēāļĄāđ€āļ›āđ‡āļ™āđ€āļˆāđ‰āļēāļ‚āļ­āļ‡ āļāļēāļĢāļ­āđ‰āļēāļ‡āļ­āļīāļ‡ lifetime āđāļĨāļ°āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāļ‚āļąāđ‰āļ™āļŠāļđāļ‡

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Rust - āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒ

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Rust: āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒ 2026

25 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Rust āļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ” Ownership, borrowing, lifetime, trait, async āđāļĨāļ° concurrency āļžāļĢāđ‰āļ­āļĄāļ„āļģāļ•āļ­āļšāļĨāļ°āđ€āļ­āļĩāļĒāļ”āđāļĨāļ°āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”

āđāļœāļ™āļ āļēāļžāđāļŠāļ”āļ‡āļĢāļ°āļšāļš Ownership āđāļĨāļ° Borrowing āļ‚āļ­āļ‡āļ āļēāļĐāļē Rust

āļ—āļģāļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆ Ownership āđāļĨāļ° Borrowing āđƒāļ™ Rust āļ­āļĒāđˆāļēāļ‡āļĨāļķāļāļ‹āļķāđ‰āļ‡ āļŠāļģāļŦāļĢāļąāļšāļ™āļąāļāļžāļąāļ’āļ™āļēāđāļĨāļ°āļœāļđāđ‰āđ€āļ•āļĢāļĩāļĒāļĄāļŠāļ­āļšāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āļšāļ—āļ„āļ§āļēāļĄāđ€āļˆāļēāļ°āļĨāļķāļāļĢāļ°āļšāļš Ownership āđāļĨāļ° Borrowing āļ‚āļ­āļ‡ Rust āļ•āļąāđ‰āļ‡āđāļ•āđˆāļžāļ·āđ‰āļ™āļāļēāļ™āļˆāļ™āļ–āļķāļ‡āļ‚āļąāđ‰āļ™āļŠāļđāļ‡ āļžāļĢāđ‰āļ­āļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”āļˆāļĢāļīāļ‡āđāļĨāļ°āđāļ™āļ§āļ—āļēāļ‡āđāļāđ‰āļ›āļąāļāļŦāļē Compiler Error āļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒ āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ•āļĢāļĩāļĒāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™