blog.dopana

Back

Rust đã giành chiến thắng “Most Loved Language” trên Stack Overflow suốt 9 năm liên tiếp. Không phải ngẫu nhiên — Rust mang lại tốc độ của C++ với safety của một ngôn ngữ hiện đại.

Rust Giải Quyết Vấn Đề Gì?#

C/C++ cho phép bạn kiểm soát từng byte bộ nhớ — nhưng một sai sót nhỏ có thể gây ra buffer overflow, use-after-free, data race. Rust ngăn những lỗi này ngay tại compile time.

Ownership — Trái Tim Của Rust#

fn main() {
    let s1 = String::from("hello");
    let s2 = s1; // s1 bị *move* vào s2

    // println!("{}", s1); // ❌ Lỗi compile! s1 không còn owner
    println!("{}", s2); // ✅ OK
}
rust

Ba quy tắc Ownership:

  1. Mỗi giá trị có một owner
  2. Chỉ một owner tại một thời điểm
  3. Owner ra khỏi scope → giá trị bị drop

Borrowing — Mượn Không Chiếm#

fn calculate_len(s: &String) -> usize {
    s.len()
} // s được trả về, không drop

fn main() {
    let s = String::from("hello");
    let len = calculate_len(&s); // Mượn (&), không move
    println!("{}: {}", s, len); // ✅ OK, s vẫn còn
}
rust

Mutable vs Immutable Borrow#

let mut s = String::from("hello");

let r1 = &s;     // OK
let r2 = &s;     // OK (nhiều immutable borrow)
let r3 = &mut s; // ❌ Lỗi! Không thể vừa immutable vừa mutable

println!("{}, {}", r1, r2);
rust

Luật: Một trong hai — nhiều reader hoặc một writer. Không bao giờ cả hai cùng lúc.

Pattern Match — Của Để Dành#

Error Handling — Không Có Exception#

Rust không có try/catch. Thay vào đó dùng Result?:

use std::fs::File;
use std::io::Read;

fn read_file(path: &str) -> Result<String, std::io::Error> {
    let mut file = File::open(path)?; // Nếu Err → return luôn
    let mut contents = String::new();
    file.read_to_string(&mut contents)?;
    Ok(contents)
}
rust

Cargo — Trình Quản Lý Package Tốt Nhất Hệ Mặt Trời#

cargo new myapp # Tạo project mới
cargo build # Build
cargo run # Chạy
cargo test # Chạy test
cargo check # Kiểm tra lỗi (nhanh, không build)
cargo add serde # Thêm dependency
cargo fmt # Format code
cargo clippy # Lint — phát hiện lỗi tiềm ẩn
bash

Ecosystem Nổi Bật#

Lĩnh vựcFramework/Thư viện
Web backendAxum, Actix-web, Rocket
CLIclap, rustyline
Databasesqlx, diesel, sea-orm
NetworkingTokio (async runtime)
WASMwasm-pack, yew, leptos
EmbeddedEmbassy, rtic
GUITauri (desktop app), egui, slint
GameBevy, macroquad

Rust Trong Thực Tế#

  • Firefox — Dùng Rust viết engine CSS (Servo → Stylo)
  • Linux kernel — Đã chính thức hỗ trợ Rust từ 6.1
  • Cloudflare — Pingora (HTTP proxy thay thế nginx)
  • Dropbox — Hệ thống đồng bộ file
  • Discord — Real-time chat service
  • Meta — Diem blockchain, các internal tool

Nên Bắt Đầu Thế Nào?#

# 1. Cài Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 2. Đọc sách (miễn phí)
# https://doc.rust-lang.org/book/

# 3. Làm bài tập
# https://rustlings.cool/

# 4. Xây thứ gì đó
# CLI tool, web server, hoặc game đơn giản
bash

Kết Luận#

Rust không dễ — learning curve dốc hơn hầu hết ngôn ngữ khác. Nhưng một khi đã hiểu Ownership, bạn sẽ thấy: Rust không chỉ là ngôn ngữ an toàn, nó còn giúp bạn viết code đúng ngay từ lần đầu. Khoản đầu tư xứng đáng cho 10 năm tới.

Tài liệu tham khảo#