30 Ngày học Rust - Day 1: Lời chào thế giới và Vũ khí Cargo
Mở đầu chuỗi 30 ngày trở thành Rustacean. Khám phá cách cài đặt Rust, viết chương trình Hello World đầu tiên và làm quen với Cargo - Trình quản lý gói xịn xò nhất thế giới code.

Lời mở đầu: Vì sao lại là Rust?
Rust đã liên tiếp 8 năm giữ vương miện “Ngôn ngữ được yêu thích nhất” trên bảng xếp hạng Stack Overflow. Nó mang lại tốc độ và khả năng kiểm soát phần cứng ngang ngửa C/C++, nhưng lại đi kèm sự an toàn tuyệt đối về bộ nhớ (Memory Safety) nhờ vào cơ chế đặc biệt mà không ngôn ngữ nào có: The Borrow Checker.
Series “30 Ngày Trở Thành Rustacean Tinh Hoa” này được thiết kế để đập bỏ mọi rào cản từ khó hiểu nhất của Rust (Ownership, Lifetimes) cho tới việc bạn có thể tự tin viết một Web API tốc độ cao.
1. Cài đặt Rust (Rustup)
Khác với việc cài đặt bằng apt, brew hay tải file exe rườm rà, cộng đồng Rust cung cấp một công cụ kỳ diệu mang tên rustup - Trình quản lý chuỗi công cụ phân phối đa nền tảng.
Chỉ cần mở Terminal (hoặc PowerShell) và gõ:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shThế là xong! Khởi động lại terminal. Để kiểm tra cài đặt thành công, gõ:
rustc --version
cargo --versionNếu màn hình in ra phiên bản (Ví dụ: rustc 1.75.0), chúc mừng bạn đã chính thức bước một chân vào giới Rustacean (từ lóng chỉ người code Rust).
2. Hello World kinh điển
Hãy tạo một file tên là main.rs ở bất cứ đâu và gõ:
fn main() {
println!("Dậy sóng đi, hỡi các Rustacean!");
}Biên dịch và chạy:
rustc main.rs(Trình biên dịch Rust sẽ dịch mã nguồn thành một file thực thi nhị phân tĩnh).- Xung quanh bạn giờ xuất hiện file
main.exe(Windows) hoặc./main(Mac/Linux). - Chạy file đó, bạn sẽ thấy dòng chữ in ra màn hình.
Lưu ý: Dấu chấm than ! trong println! không phải để cho vui. Nó ám chỉ rằng bạn đang gọi một “Macro” chứ không phải một “Function” bình thường. Sự khác biệt này sẽ được làm rõ ở các Ngày sau.
3. Cargo - Người bạn đồng hành vĩ đại
Việc dùng rustc chỉ dành cho file đơn lẻ. Khi làm dự án thật với hàng trăm file và các thư viện tải về từ Internet, bạn cần Cargo. Cargo là “Trình quản lý gói” (như npm của Node.js) và là “Trình build dự án” (như Vite/Webpack).
Khởi tạo một dự án mới cực kỳ chuyên nghiệp:
cargo new hello_cargo
cd hello_cargoLúc này, Cargo tự động đẻ ra:
- File
Cargo.toml: Nơi khai báo thông tin dự án và danh sách các thư viện cần dùng (Crates). - Thư mục
src/main.rs: File code gốc của bạn đã có sẵn hàm Hello World.
Để chạy dự án này, bạn không cần gọi rustc nữa. Chỉ cần mỉm cười và gõ:
cargo runCargo sẽ lẳng lặng tải về toàn bộ dependency, biên dịch chúng, gộp vào code của bạn và chạy một mạch ra kết quả. Quá sướng!
Câu hỏi thường gặp (FAQ)
Cargo có khác gì npm của JS hay pip của Python không?
Cargo vượt trội hơn hẳn. Nó không chỉ tải/liên kết thư viện (crates.io) mà nó còn phụ trách việc chạy Test (cargo test), format code cho chuẩn đẹp (cargo fmt), bắt lỗi code rác (cargo clippy), và đóng gói cho production (cargo build --release).
Code file thực thi (.exe) của Rust có cần cài thêm phần mềm gì để chạy không?
Không! Không giống Java (cần cài JRE) hay Python (cần trình thông dịch), Rust biên dịch thẳng ra Máy ảo CPU nguyên thủy (Ahead-Of-Time compiled). Bạn có thể copy cái file .exe vừa tạo gửi cho ông hàng xóm, ổng nhấp đúp là chạy mượt mà ngay cả khi máy ổng không cài Rust.
Sẵn sàng cho Ngày 2? Hôm nay chúng ta đã có đồ nghề. Trong bài viết ngày mai [Day 2: Variables, Mutability & Shadowing], chúng ta sẽ thấy Rust dập tắt thói quen “khai báo biến vô tội vạ” của con người từ trứng nước như thế nào.
Chuỗi bài viết
30 Ngày Trở Thành Rustacean Tinh Hoa
Phần 1 / 30
- Phần 1 30 Ngày học Rust - Day 1: Lời chào thế giới và Vũ khí Cargo
- Phần 2 30 Ngày học Rust - Day 2: Biến, Bất biến (Mutability) và Shadowing
- Phần 3 30 Ngày học Rust - Day 3: Luồng điều khiển (Control Flow) và sức mạnh của Match
- Phần 4 30 Ngày học Rust - Day 4: Ownership - Khái niệm định hình cỗ thần khí Rust
- Phần 5 30 Ngày học Rust - Day 5: Khóa học nhặt đồ chung với References & Borrowing
- Phần 6 30 Ngày học Rust - Day 6: Đắp nặn dự án với Structs và Methods
- Phần 7 30 Ngày học Rust - Day 7: Quyền năng vô song của Enums và Pattern Matching
- Phần 8 30 Ngày học Rust - Day 8: Quản lý dự án với Packages, Crates và Modules
- Phần 9 30 Ngày học Rust - Day 9: Các bộ sưu tập chung (Vectors, Strings, Hash Maps)
- Phần 10 30 Ngày học Rust - Day 10: Trị dứt điểm Ác mộng Lỗi (Error Handling)
- Phần 11 30 Ngày học Rust - Day 11: Generics - Ma thuật Đa hình kiểu dữ liệu
- Phần 12 30 Ngày học Rust - Day 12: Traits - Kẻ ban phát quyền năng và Lập pháp Hành vi
- Phần 13 30 Ngày học Rust - Day 13: Vượt qua Boss cuối 'Lifetimes' - Sinh Mệnh Biến
- Phần 14 30 Ngày học Rust - Day 14: Tận diệt Bug từ trứng nước bằng Automated Tests
- Phần 15 30 Ngày học Rust - Day 15: Thực chiến Build Command Line App (CLI) đầu đời
- Phần 16 30 Ngày học Rust - Day 16: Functional Magic chốn trần gian (Closures & Iterators)
- Phần 17 30 Ngày học Rust - Day 17: Quyền năng của Smart Pointers
- Phần 18 30 Ngày học Rust - Day 18: Chinh phục Da luồng (Concurrency) - Cú đâm quyết định của Rust
- Phần 19 30 Ngày học Rust - Day 19: Tranh cãi Lập trình hướng đối tượng (OOP) trong Rust
- Phần 20 30 Ngày học Rust - Day 20: Mổ xẻ nghệ thuật Advanced Pattern Matching
- Phần 21 30 Ngày học Rust - Day 21: Sức mạnh tối thượng của Advanced Traits
- Phần 22 30 Ngày học Rust - Day 22: Về Phe Bóng Tối với Unsafe Rust
- Phần 23 30 Ngày học Rust - Day 23: Quyền năng của Đấng Tạo Hóa (Declarative Macros)
- Phần 24 30 Ngày học Rust - Day 24: Siêu Năng Lực Procedural Macros (Macro Thủ Tục)
- Phần 25 30 Ngày học Rust - Day 25: Xây dựng TCP Web Server Đa Luồng (Phần 1: Lõi Socket)
- Phần 26 30 Ngày học Rust - Day 26: Xây dựng TCP Web Server Đa Luồng (Phần 2: Bắn trả File HTML)
- Phần 27 30 Ngày học Rust - Day 27: Xây dựng TCP Web Server Đa Luồng (Phần 3: The Thread Pool)
- Phần 28 30 Ngày học Rust - Day 28: Xây dựng TCP Web Server Đa Luồng (Phần 4: Graceful Shutdown)
- Phần 29 30 Ngày học Rust - Day 29: Lên đỉnh Web Server Thực Chiến với Axum và Tokio
- Phần 30 30 Ngày học Rust - Day 30: Vượt Vọng Vàng - Đúc Kết Hành Trình Rustacean Tinh Hoa