
Tôi đã dành sáu tháng để né tránh Rust. Tôi tự nhủ: "Nó dành cho các nhà phát triển kernel. Quá khó cho mấy thứ web." Rồi tôi cần một công cụ CLI nhanh hơn Python và di động hơn Node, và tôi đủ tò mò để thử.
Hai tháng sau, tôi viết Rust thường xuyên. Không phải vì tôi đổi nghề, và cũng không phải vì mọi dự án đều cần nó. Mà vì việc biết Rust đã âm thầm biến tôi thành một nhà phát triển JavaScript và Python giỏi hơn.
Borrow checker – thứ mà mọi người đều cảnh báo bạn – không phải là hình phạt. Nó là một người thầy.
Khi bạn viết JavaScript, bạn không nghĩ về việc ai sở hữu một biến, khi nào nó được giải phóng, hay liệu hai phần mã của bạn có thể thay đổi nó cùng lúc hay không. Runtime xử lý tất cả những điều đó, một cách vô hình. Rust buộc bạn phải suy nghĩ rõ ràng về nó, tại thời điểm biên dịch.
Bạn không cần phải viết Rust cho sản phẩm để nhận được giá trị từ nó. Việc học mô hình sở hữu sẽ thay đổi cách bạn suy luận về JavaScript, Python, Go: bất cứ thứ gì có trạng thái có thể thay đổi.
Vài tuần đầu tôi dành để tranh cãi với trình biên dịch. Sau đó tôi bắt đầu hiểu tại sao nó lại phàn nàn, và tôi nhận thấy mình đang viết JavaScript khác đi. Ít thay đổi tại chỗ hơn. Quyền sở hữu dữ liệu rõ ràng hơn. Các hàm không âm thầm chia sẻ các tham chiếu có thể thay đổi.
Trong JavaScript, điều này cảm thấy hoàn toàn tự nhiên:
let data = fetchData();
processA(data);
processB(data);
Nhưng processA làm gì với data? Có thể không làm gì cả. Có thể nó thay đổi nó. Bạn phải đọc hàm. Rust làm cho quyền sở hữu rõ ràng:
let data = fetch_data();
process_a(&data); // borrows: data is read-only here
process_b(&mut data); // mutates: borrow checker tracks this
Một khi mô hình đó được hiểu rõ, bạn bắt đầu nhận thấy tất cả những nơi trong JavaScript của mình mà bạn đang truyền một đối tượng cho một hàm và hy vọng nó không sửa đổi nó. Rust chỉ khiến bạn phải nói ra điều đó.
Borrow checker của Rust là gì?
Đây không phải là lý thuyết. Rust có những chỗ đứng vững chắc trong hệ sinh thái web:
WebAssembly: Rust biên dịch sang WASM tốt hơn hầu hết mọi thứ khác. Nếu bạn cần một phần logic quan trọng về hiệu suất chạy trong trình duyệt (xử lý hình ảnh, mật mã, phân tích cú pháp), Rust + WASM là một lựa chọn nghiêm túc. Bộ công cụ wasm-pack đã thực sự tốt.
Công cụ CLI: Xây dựng một công cụ nhị phân đơn với Clap rất nhanh, và kết quả được phân phối mà không có bất kỳ dependency runtime nào. Tôi đã xây dựng một công cụ xử lý tệp nhỏ cho một dự án, và việc phân phối nó có nghĩa là đưa cho ai đó một tệp nhị phân. Chỉ vậy thôi.
Edge Functions: Cloudflare Workers hỗ trợ Rust. Thời gian khởi động lạnh thấp hơn nhiều so với Node, và đối với các middleware nhạy cảm với độ trễ (kiểm tra xác thực, định tuyến A/B), điều đó rất quan trọng.
Công cụ phát triển: Rất nhiều công cụ bạn đang sử dụng đã được viết bằng Rust: Biome, SWC, Turbopack, Rolldown. Những công cụ này tồn tại vì Rust giúp việc xây dựng các công cụ JavaScript nhanh hơn 10 đến 50 lần so với các công cụ tương đương trong Node trở nên khả thi.
Sách Rust miễn phí tại doc.rust-lang.org/book và nó thực sự là một trong những cuốn sách kỹ thuật hay nhất mà tôi từng đọc. Hãy đọc hết mười chương đầu. Bạn sẽ gặp borrow checker khá nhiều ở chương 4. Hãy kiên trì với nó.
Rustlings: các bài tập nhỏ trong terminal. Tốt cho việc rèn luyện phản xạ. Advent of Code in Rust: các bài toán nhỏ như câu đố, nơi bạn buộc phải giải quyết các nhiệm vụ thực tế. Xây dựng một công cụ CLI: chọn một thứ mà bạn thường dùng Python để làm và xây dựng nó bằng Rust thay thế.
Đừng cố gắng viết máy chủ web bằng Rust trong tuần đầu tiên. Đó là cách nhanh nhất để nản lòng. Bắt đầu với các chương trình độc lập nơi bạn kiểm soát tất cả các đầu vào.
Tôi sẽ không tuyên bố Rust đã thay thế ngăn xếp hàng ngày của tôi. Hầu hết công việc của tôi vẫn là JavaScript và Python. Nhưng những mô hình tư duy mà tôi đã học được – suy nghĩ về quyền sở hữu, rõ ràng về sự thay đổi, quan tâm đến việc một hàm mượn hay tiêu thụ đầu vào của nó – đã thực sự thấm vào cách tôi viết bằng những ngôn ngữ đó.
Sự đầu tư là có thật. Trình biên dịch ban đầu không khoan nhượng. Nhưng có một điều gì đó vô cùng thỏa mãn khi viết mã mà trình biên dịch đã xác minh tính đúng đắn trước khi bạn chạy nó. Quay lại JavaScript sau đó, bạn bắt đầu nhận thấy mọi undefined và mọi thay đổi ngầm định như một điều bạn đã chọn chấp nhận.
Đó không phải là một điều tồi tệ để nhận ra.
Rust Học tập WebAssemblyLàm sạch log AI CLI, tạo biểu thức cron, giải mã JWT và tính quyền chmod offline.

Nắm vững lifetimes và borrow checker của Rust: hiểu variance của tham chiếu, elision lifetime ẩn danh so với có tên, và tránh các xung đột trình biên dịch phức tạp.
Đọc tiếp
Hướng dẫn kiến trúc chuyên sâu về Rust hiệu suất cao với WebAssembly SIMD: tăng tốc tính toán trình duyệt lên 10 lần với các ví dụ thực tế đã được kiểm chứng trong sản xuất.
Đọc tiếp
Khám phá cách WebAssembly (Wasm) và WASI 0.2 đang định nghĩa lại điện toán biên với thời gian khởi động lạnh micro giây, bảo mật dựa trên khả năng và các thành phần Rust.
Đọc tiếp