Chuyện học Rust: Từ dân GC sang ownership
Chào mấy bạn, hôm nay mình lên đây ngồi kể chuyện tí.
Chắc cũng nhiều bạn giống mình — ngày xưa code JavaScript, TypeScript các kiểu, rồi qua .NET. Cả đời quen với mấy cha garbage collector lo dọn rác cho. Rồi một ngày đẹp trời, mình quyết định nhảy vào Rust.
Thiệt tình, mấy ngày đầu mình tưởng mình ngu hay gì á. Viết cái gì cũng "borrow of moved value", "cannot borrow as mutable"... đọc mà muốn xé màn hình luôn ấy.
Cái trận đầu tiên — borrow checker nó chửi
Hồi đó mình viết cái hàm đọc file ffmpeg log:
fn process_log(path: &str) {
let content = fs::read_to_string(path).unwrap();
let parsed = parse_content(&content);
let result = transform(content); // ủa content đi đâu rồi??
}
Má, nó bảo content đã move rồi. Mình ngồi cào mặt bàn 15 phút mới nhận ra là Rust nó không cho mình dùng content nữa sau khi move. Một khái niệm hoàn toàn xa lạ với dân JS/.NET như mình.
Ở JS thì viết content.trim() bao nhiêu lần cũng được, .NET thì string là immutable, xài vô tư. Cơ mà Rust... ối dồi ôi.
Rồi cũng ngộ ra
Mình nhai cái chapter 4 của The Book chắc 3 lần mới thấm. Ownership, borrowing, lifetimes. Những thứ mà trước đây mình không bao giờ phải nghĩ tới.
Cơ mà càng học càng thấy hay. Cái borrow checker nó gắt, nhưng nó gắt vì nó muốn tốt cho mình. Hồi ở .NET mình từng debug memory leak cả tuần, tìm không ra. Qua Rust, mấy cái vụ đó gần như không xảy ra — nó chặn từ compile time rồi.
Mấy cái "à ra thế" trong quá trình học
-
"Không có GC không phải là thiếu — mà là khác" — Rust nó không cần GC vì ownership model xử lý hết lúc compile. Lúc compile xong là biết chính xác khi nào memory được giải phóng. Nhanh vãi.
-
Move semantics thực ra rất gần gũi với thực tế — chỉ có mình là không quen thôi. Như kiểu mượn xe bạn, mượn xong trả, chứ không phải ai cũng được dùng cùng lúc. Thiệt ra nó cũng logical mà.
-
Học lifetime làm mình code .NET cũng khác — tự nhiên mình để ý hơn về object lifetimes, disposed patterns, using blocks. Nhờ Rust mà mình code C# cẩn thận hơn.
Lời khuyên cho ai mới học
Nếu bạn là dân JavaScript, TypeScript, C#, Java... sắp học Rust, mình khuyên thiệt:
- Đừng bỏ cuộc sau tuần đầu — ai cũng bị borrow checker chửi như vậy
- Đọc The Book, mà đừng đọc một lần — đọc đi đọc lại, mỗi lần thấm thêm tí
- Làm bài tập nhỏ: CLI tool, file parser, calculator... đừng lao vào web server hay game ngay
- Dùng VSCode với rust-analyzer — cái extension này cứu mình không biết bao nhiêu lần
Nói chung thì học Rust là một trải nghiệm thú vị. Mệt nhưng đã. Có người bảo "tốn thời gian" nhưng mình nghĩ nó làm mình thành một dev tốt hơn — biết thêm về memory, về hệ thống, về những thứ mà môi trường high-level che giấu mất.
Có bạn nào cũng đang học Rust hong? Bị borrow checker chửi chưa? Vô cmt chia sẻ cho vui nha!
Hẹn gặp lại mấy bạn ở bài sau. Mình đi xào mì tôm đây 🍜
Ảnh bìa: Ảnh bởi Myburgh Roux trên Pexels