Bỏ qua để đến nội dung

Giới thiệu Rust

Rust là một ngôn ngữ lập trình hệ thống — loại ngôn ngữ bạn dùng cho cùng những việc như C hay C++: hệ điều hành, game engine, trình duyệt, cơ sở dữ liệu và công cụ dòng lệnh, những nơi tốc độ và quyền kiểm soát là quan trọng.

Điều làm Rust đặc biệt là nó cho bạn hiệu năng cấp thấp như vậy mà không kèm theo những cái bẫy quen thuộc. Trong C, bạn rất dễ vô tình đọc vùng nhớ đã bị giải phóng hoặc gây ra tranh chấp dữ liệu (data race). Trong Rust, code như thế thường còn không biên dịch được — trình biên dịch chặn bạn ngay lúc build.

Rust khởi đầu là dự án cá nhân của Graydon Hoare, sau đó ông mang nó đến Mozilla để được tài trợ, và Rust ra phiên bản ổn định 1.0 vào năm 2015. Hiện nay Rust được duy trì bởi Rust Foundation (tiếng Anh) cùng một cộng đồng mã nguồn mở rất lớn.

Trước đây, bạn phải chọn giữa hai sự đánh đổi:

  • Ngôn ngữ cấp thấp (C, C++): nhanh và gần phần cứng, nhưng bạn phải tự tay quản lý bộ nhớ. Sai sót dẫn đến chương trình bị sập và lỗ hổng bảo mật.
  • Ngôn ngữ cấp cao (Python, Java, Go): an toàn và dễ dùng, nhưng dựa vào bộ thu gom rác (garbage collector), vốn tốn hiệu năng và khó đoán trước.

Ý tưởng lớn của Rust là một lựa chọn thứ ba: nó đảm bảo an toàn bộ nhớ ngay lúc biên dịch bằng một hệ thống gọi là quyền sở hữu (ownership) — bạn sẽ học nó ở phần sau của khóa học. Không có bộ thu gom rác, không phải tự gọi free() — trình biên dịch tự tìm ra lúc nào bộ nhớ không còn cần nữa.

Một tấm bản đồ sơ lược cho thấy Rust đứng ở đâu so với những ngôn ngữ có thể bạn đã biết:

Ngôn ngữ Tốc độ An toàn bộ nhớ Bộ thu gom rác
C / C++ Nhanh Thủ công, dễ sai Không
Go Tốt An toàn Có
Python Chậm hơn An toàn Có
Rust Nhanh An toàn (kiểm tra lúc biên dịch) Không

Điều rút ra: Rust nhắm tới tốc độ ngang C và sự an toàn của ngôn ngữ cấp cao cùng một lúc. Muốn so sánh kỹ hơn, đặt cạnh nhau bằng code thật, hãy xem Rust so với C++, Go và Python.

Rất có thể bạn đang chạy Rust mà không hề hay biết:

  • Firefox — một phần engine hiển thị của nó được viết bằng Rust
  • Cloudflare và Discord — các dịch vụ backend cần hiệu năng cao
  • Nhân Linux — giờ đã nhận driver viết bằng Rust
  • Công cụ dòng lệnh — những công cụ nhanh được ưa chuộng như ripgrep (tiếng Anh), bat và fd
  • WebAssembly — Rust là lựa chọn hàng đầu để chạy code với tốc độ gần như native ngay trên trình duyệt

Bạn chưa cần hiểu hết từng chi tiết — chỉ cần để ý xem nó dễ đọc thế nào:

fn main() {
let name = "Rustacean";
println!("Xin chào, {name}!");
}

Kết quả:

Xin chào, Rustacean!
▶ Tự chạy thử

“An toàn” trông như thế nào trong thực tế

Phần tiêu đề ““An toàn” trông như thế nào trong thực tế”

“An toàn bộ nhớ” nghe có vẻ trừu tượng, nên đây là một ví dụ cụ thể. Giả sử bạn có một danh sách ba điểm số và bạn hỏi điểm thứ mười, vốn không tồn tại.

Trong C, việc này được cho phép. Chương trình lặng lẽ đọc bất cứ thứ gì tình cờ nằm trong bộ nhớ ngay sau danh sách của bạn. Bạn có thể nhận được một con số ngẫu nhiên, chương trình bị sập, hoặc một lỗ hổng bảo mật, và chẳng có gì cảnh báo bạn cả.

Rust không bỏ qua chuyện đó. Nếu trình biên dịch thấy được lỗi, nó từ chối build chương trình:

fn main() {
let scores = [90, 85, 77];
println!("{}", scores[9]);
}
error: this operation will panic at runtime
--> src/main.rs:3:20
|
3 | println!("{}", scores[9]);
| ^^^^^^^^^ index out of bounds: the length is 3 but the index is 9

Thông báo lỗi của trình biên dịch luôn bằng tiếng Anh: nó nói thao tác này sẽ panic khi chạy, vì chỉ số 9 nằm ngoài mảng chỉ có độ dài 3.

Còn khi bạn không chắc một phần tử có tồn tại hay không, Rust cho bạn một cách hỏi lịch sự. .get() trả lời “đây này” hoặc “ở đó chẳng có gì” (None), thay vì đưa cho bạn dữ liệu rác:

fn main() {
let scores = [90, 85, 77];
println!("điểm thứ nhất: {}", scores[0]);
println!("điểm thứ mười: {:?}", scores.get(9));
}

Kết quả:

điểm thứ nhất: 90
điểm thứ mười: None
▶ Tự chạy thử

Đừng lo về [...], .get() hay None vội. Bạn sẽ học chúng đầy đủ trong bài Mảng và Option. Điều quan trọng lúc này: cả một nhóm lỗi “đọc vùng nhớ không được phép đọc” hoặc bị bắt trước khi chương trình chạy, hoặc được xử lý an toàn trong lúc chạy.

Trả lời thật lòng: một hai tuần đầu có thể khá bực mình. Những khái niệm như quyền sở hữu (ownership) và mượn (borrowing) thực sự mới mẻ, và trình biên dịch sẽ từ chối những đoạn code mà bạn nghĩ là chạy được. Nhưng sự va chạm đó chính là trình biên dịch đang dạy bạn viết code an toàn hơn — và bạn sẽ quen nhanh hơn phần lớn mọi người tưởng.

Khóa học này được xây dựng để làm con dốc đó thoai thoải hơn: từng bước nhỏ, ví dụ thật, và nút Tự chạy thử ở khắp mọi nơi.

Sửa chương trình “nếm thử” để nó chào bạn bằng tên, và thêm dòng thứ hai in ra Chào mừng đến với Rust!. Gợi ý: mỗi println! in một dòng, nên bạn cần hai lệnh.

Xem lời giải
fn main() {
let name = "Lan";
println!("Xin chào, {name}!");
println!("Chào mừng đến với Rust!");
}

Kết quả:

Xin chào, Lan!
Chào mừng đến với Rust!
▶ Tự chạy thử

Lưu chữ Rust và năm 2015 vào hai cái tên, rồi in câu Rust 1.0 ra mắt năm 2015. bằng cả hai. Gợi ý: bạn có thể đặt nhiều {name} trong cùng một println!.

Xem lời giải
fn main() {
let language = "Rust";
let year = 2015;
println!("{language} 1.0 ra mắt năm {year}.");
}

Kết quả:

Rust 1.0 ra mắt năm 2015.
▶ Tự chạy thử
  • Rust là một ngôn ngữ hệ thống nhanh và an toàn — tốc độ ngang C, không có bộ thu gom rác.
  • Nó ngăn lỗi bộ nhớ ngay lúc biên dịch nhờ quyền sở hữu (ownership).
  • Rust được dùng trong trình duyệt, nhân hệ điều hành, dịch vụ đám mây, công cụ dòng lệnh và WebAssembly.
  • Con dốc học tập là có thật nhưng ngắn — trình biên dịch đứng về phía bạn.

Tiếp theo: cài đặt Rust và chạy chương trình đầu tiên trên máy của bạn.

Kiểm tra nhanh

1. Rust đạt được an toàn bộ nhớ mà không cần bộ thu gom rác bằng cách nào?

2. Theo bảng so sánh, Rust và Go có điểm gì chung?

3. Lập trình viên Rust tự gọi mình là gì?

Điểm: 0 / 3

  • Introduction — The Rust Book (tiếng Anh): cuốn sách chính thức dành cho ai và được sắp xếp thế nào. Đây là người bạn đồng hành miễn phí tốt nhất cho khóa học này.
  • rust-lang.org (tiếng Anh): trang chủ chính thức, với phần “Why Rust?” (hiệu năng, độ tin cậy, năng suất) và câu chuyện từ các công ty đang dùng Rust.
  • Learn Rust (tiếng Anh): danh sách tài liệu học chính thức, gồm cả Rust by Example và bài tập Rustlings.
  • Announcing Rust 1.0 — Rust Blog (tiếng Anh): bài viết năm 2015 đánh dấu Rust trở nên ổn định, và “sự ổn định” hứa hẹn điều gì cho code của bạn.
  • Rust Foundation (tiếng Anh): tổ chức phi lợi nhuận hỗ trợ dự án Rust và những người duy trì nó.