Skip to content

Foundations Part 2 Critical

Ownership & Borrowing — Trái tim của Rust, không học điều này = không hiểu Rust

⚠️ PHẦN QUAN TRỌNG NHẤT

Đây là phần định hình mọi thứ trong Rust. Nếu bạn không hiểu Ownership và Borrowing, code Rust của bạn sẽ liên tục gặp compiler errors mà không biết tại sao.

Hãy dành thời gian đọc kỹ. Vẽ lại diagrams. Thử code. Xem compiler errors.

Tại sao Ownership quan trọng?

Rust giải quyết bài toán khó nhất trong Systems Programming:

┌─────────────────────────────────────────────────────────────────┐
│                    THE MEMORY TRILEMMA                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   Truyền thống, bạn chỉ được chọn 2 trong 3:                    │
│                                                                 │
│           PERFORMANCE          SAFETY          SIMPLICITY       │
│               ▲                  ▲                 ▲            │
│               │                  │                 │            │
│   ┌───────────┴──────────────────┴─────────────────┴──────────┐ │
│   │                                                           │ │
│   │  C/C++:     ✅ Performance  ❌ Safety    ✅ Simplicity    │ │
│   │             (buffer overflows, use-after-free)            │ │
│   │                                                           │ │
│   │  Java/Go:   ❌ Performance  ✅ Safety    ✅ Simplicity    │ │
│   │             (GC pauses, memory overhead)                  │ │
│   │                                                           │ │
│   │  Rust:      ✅ Performance  ✅ Safety    ❌ Learning Curve│ │
│   │             (Ownership/Borrowing is the price)            │ │
│   └───────────────────────────────────────────────────────────┘ │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Nội dung Module

1. Ownership - The Law

Ba quy tắc vàng của Ownership:

  • Mỗi value có một owner duy nhất
  • Owner ra khỏi scope → value bị dropped
  • Move semantics: Chuyển ownership = invalidate biến cũ

Phân biệt Copy trait vs Drop trait.

2. Borrowing & References

"Mượn" data mà không lấy ownership:

  • &T — Immutable reference (nhiều readers)
  • &mut T — Mutable reference (một writer duy nhất)
  • Dangling references: Compiler ngăn chặn thế nào?
  • Slices (&str, &[T]) — View into memory

3. Data Modeling - Structs & Enums

Định nghĩa custom types:

  • Struct variants (named, tuple, unit)
  • Enums as Algebraic Data TypesOption<T>, Result<T, E>
  • match exhaustiveness
  • if let syntax sugar

Roadmap học tập

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   OWNERSHIP     │────▶│    BORROWING    │────▶│  DATA MODELING  │
│                 │     │                 │     │                 │
│ • 3 Rules       │     │ • &T vs &mut T  │     │ • Structs       │
│ • Move/Copy     │     │ • Slices        │     │ • Enums (ADT)   │
│ • Drop          │     │ • Lifetimes     │     │ • Option/Result │
└─────────────────┘     └─────────────────┘     └─────────────────┘
         │                      │                       │
         ▼                      ▼                       ▼
   ┌─────────────────────────────────────────────────────────┐
   │              COMPILE-TIME MEMORY SAFETY                 │
   │      Không cần Garbage Collector, không runtime cost    │
   └─────────────────────────────────────────────────────────┘

Phương pháp học

💡 TEACHING BY FAILING

Trong Part 2, mỗi concept sẽ được giới thiệu qua:

  1. Code SAI → xem compiler error
  2. Phân tích error → hiểu tại sao sai
  3. Code ĐÚNG → hiểu cách Rust muốn bạn làm

Đây là cách hiệu quả nhất để học Ownership/Borrowing.


Bắt đầu

Bước tiếp theo

  1. 📖 Ownership - The LawBẮT ĐẦU TỪ ĐÂY
  2. 🔗 Borrowing & References — Sau khi hiểu ownership
  3. 🏗️ Data Modeling — Kết hợp tất cả