Rust — Ngôn Ngữ Tương Lai Của Lập Trình Hệ Thống
Tại sao Rust đang dần thay thế C/C++ trong hệ sinh thái hiện đại và làm thế nào để bắt đầu.
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
}rustBa quy tắc Ownership:
- Mỗi giá trị có một owner
- Chỉ một owner tại một thời điểm
- 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
}rustMutable 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);rustLuậ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#
enum Result<T, E> {
Ok(T),
Err(E),
}
fn divide(a: f64, b: f64) -> Result<f64, String> {
if b == 0.0 {
Err("Cannot divide by zero".to_string())
} else {
Ok(a / b)
}
}
fn main() {
match divide(10.0, 0.0) {
Ok(result) => println!("Result: {}", result),
Err(msg) => println!("Error: {}", msg),
}
}rustError Handling — Không Có Exception#
Rust không có try/catch. Thay vào đó dùng Result và ?:
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)
}rustCargo — 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 ẩnbashEcosystem Nổi Bật#
| Lĩnh vực | Framework/Thư viện |
|---|---|
| Web backend | Axum, Actix-web, Rocket |
| CLI | clap, rustyline |
| Database | sqlx, diesel, sea-orm |
| Networking | Tokio (async runtime) |
| WASM | wasm-pack, yew, leptos |
| Embedded | Embassy, rtic |
| GUI | Tauri (desktop app), egui, slint |
| Game | Bevy, 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ảnbashKế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.