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 130 Ngày học Rust - Day 1: Lời chào thế giới và Vũ khí Cargo
- Phần 230 Ngày học Rust - Day 2: Biến, Bất biến (Mutability) và Shadowing
- Phần 330 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 430 Ngày học Rust - Day 4: Ownership - Khái niệm định hình cỗ thần khí Rust
- Phần 530 Ngày học Rust - Day 5: Khóa học nhặt đồ chung với References & Borrowing
- Phần 630 Ngày học Rust - Day 6: Đắp nặn dự án với Structs và Methods
- Phần 730 Ngày học Rust - Day 7: Quyền năng vô song của Enums và Pattern Matching
- Phần 830 Ngày học Rust - Day 8: Quản lý dự án với Packages, Crates và Modules
- Phần 930 Ngày học Rust - Day 9: Các bộ sưu tập chung (Vectors, Strings, Hash Maps)
- Phần 1030 Ngày học Rust - Day 10: Trị dứt điểm Ác mộng Lỗi (Error Handling)
- Phần 1130 Ngày học Rust - Day 11: Generics - Ma thuật Đa hình kiểu dữ liệu
- Phần 1230 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 1330 Ngày học Rust - Day 13: Vượt qua Boss cuối 'Lifetimes' - Sinh Mệnh Biến
- Phần 1430 Ngày học Rust - Day 14: Tận diệt Bug từ trứng nước bằng Automated Tests
- Phần 1530 Ngày học Rust - Day 15: Thực chiến Build Command Line App (CLI) đầu đời
- Phần 1630 Ngày học Rust - Day 16: Functional Magic chốn trần gian (Closures & Iterators)
- Phần 1730 Ngày học Rust - Day 17: Quyền năng của Smart Pointers
- Phần 1830 Ngày học Rust - Day 18: Chinh phục Da luồng (Concurrency) - Cú đâm quyết định của Rust
- Phần 1930 Ngày học Rust - Day 19: Tranh cãi Lập trình hướng đối tượng (OOP) trong Rust
- Phần 2030 Ngày học Rust - Day 20: Mổ xẻ nghệ thuật Advanced Pattern Matching
- Phần 2130 Ngày học Rust - Day 21: Sức mạnh tối thượng của Advanced Traits
- Phần 2230 Ngày học Rust - Day 22: Về Phe Bóng Tối với Unsafe Rust
- Phần 2330 Ngày học Rust - Day 23: Quyền năng của Đấng Tạo Hóa (Declarative Macros)
- Phần 2430 Ngày học Rust - Day 24: Siêu Năng Lực Procedural Macros (Macro Thủ Tục)
- Phần 2530 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 2630 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 2730 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 2830 Ngày học Rust - Day 28: Xây dựng TCP Web Server Đa Luồng (Phần 4: Graceful Shutdown)
- Phần 2930 Ngày học Rust - Day 29: Lên đỉnh Web Server Thực Chiến với Axum và Tokio
- Phần 3030 Ngày học Rust - Day 30: Vượt Vọng Vàng - Đúc Kết Hành Trình Rustacean Tinh Hoa
