VietTechiesHIỂU CÔNG NGHỆ. MỞ GÓC NHÌN.
☰ Chuyên mục

Graydon Hoare bắt tay làm Rust sau một lần thang máy hỏng. Ông nói Rust mình muốn “có lẽ đã không có tương lai”.

15/10/2026 · VietTechies · Biên tập

Bào tử nấm gỉ sắt màu cam trên một chiếc lá xanh, bên cạnh các dòng chữ “Graydon Hoare” và “Rust · Vancouver, 2006” cùng một đường kẻ màu cam vẽ thành hình bậc cầu thang.


Năm 2006, sau một chặng leo cầu thang dài, Graydon Hoare bắt tay thiết kế ngôn ngữ lập trình về sau trở thành Rust. Thang máy trong tòa chung cư của ông ở Vancouver đang hỏng — phần mềm thang máy đã sập (crash), và đây không phải lần đầu — mà nhà ông lại ở tầng 21.

Theo lời kể sau này của tạp chí MIT Technology Review, trên đường leo lên, ông đã nghĩ: “Thật nực cười, dân máy tính chúng ta mà đến một cái thang máy chạy không gặp sự cố cũng không làm nổi!” Hoare, khi đó là một lập trình viên 29 tuổi làm việc cho Mozilla, mở laptop ra. Ông hy vọng ngôn ngữ mới của mình sẽ giúp người ta viết được code nhỏ gọn, chạy nhanh mà không có lỗi bộ nhớ.

Ông đặt tên cho ngôn ngữ này theo nấm gỉ sắt (rust fungi) — một nhóm sinh vật có sức sống bền bỉ lạ thường, mà theo lời ông là “được thiết kế quá mức cần thiết để sinh tồn”.

Vấn đề mà Hoare nhắm tới là có thật. Ông biết rằng nhiều vụ sập phần mềm bắt nguồn từ sai sót trong cách chương trình dùng bộ nhớ, và cũng chính những sai sót ấy tạo ra lỗ hổng bảo mật. Năm 2019, Trung tâm Ứng phó Bảo mật của Microsoft cho biết năm nào cũng vậy, các vấn đề về an toàn bộ nhớ chiếm khoảng 70% số lỗ hổng được Microsoft cấp mã CVE, tức mã định danh công khai của một lỗi bảo mật.

Rust 1.0 ra mắt năm 2015, khi nhiều phần trong ngôn ngữ do Hoare thiết kế ban đầu đã không còn — và Hoare cũng không còn ở vị trí trưởng dự án.

Một dự án tay trái “không có gì mới”

Suốt nhiều năm, Rust chỉ là một thú vui riêng. Khi giới thiệu Rust tại hội nghị thường niên của Mozilla vào tháng 7 năm 2010, Hoare ghi trên slide rằng mình đã viết “một ngôn ngữ lập trình hệ thống dạng biên dịch, an toàn và hỗ trợ xử lý đồng thời, suốt bốn năm rưỡi qua”. Dòng kế tiếp viết: “Kiểu làm lúc rảnh thôi.” Một nhóm nhỏ ở Mozilla chỉ mới quan tâm đến dự án trong một năm trước đó, sau khi ông kể cho họ nghe mình đang làm gì. Năm 2009, Mozilla đã quyết định chính thức tài trợ cho Rust và bắt đầu trả lương cho các kỹ sư phát triển ngôn ngữ này.

Cách Hoare chào hàng Rust hiếm thấy ở một ngôn ngữ mới. “Rust là một ngôn ngữ chủ yếu cóp nhặt từ các ngôn ngữ đi trước”, một slide viết. “Không có gì mới.” Hoare liệt kê những ngôn ngữ cũ hơn đã góp ý tưởng cho Rust, trong đó có Erlang (1987), Newsqueak (1988) và Limbo (1996). Trên slide kêu gọi trợ giúp, ông nhắn những ai muốn đóng góp: “Làm ơn: đừng nghiên cứu, đừng bày ra cái mới! Tài liệu học thuật đã có sẵn rất nhiều công nghệ được kiểm chứng là tốt.”

Nhìn bằng con mắt hôm nay, Rust năm 2010 trông lạ lẫm. Chương trình “hello, world” khi ấy dùng log "hello, world";, các hàm trả về giá trị bằng ret, còn các slide hứa hẹn những tác vụ nhẹ (lightweight task) và khẳng định có thể tạo 100.000 tác vụ trong khoảng một giây. Một hệ thống mang tên “typestate” kiểm tra nhiều thứ, trong đó có việc biến đã được khởi tạo trước khi dùng hay chưa. Trình biên dịch (compiler) khi đó là bản khởi đầu (bootstrap) dài 38.000 dòng, viết bằng OCaml — một ngôn ngữ lập trình hàm.

Những gì nhóm Rust cắt bỏ trước bản 1.0

Các kỹ sư Mozilla như Patrick Walton, Niko Matsakis và Felix Klock cùng góp sức. Theo MIT Technology Review, suốt những năm đầu thập niên 2010, các kỹ sư Mozilla cùng những tình nguyện viên Rust khắp thế giới đã mài giũa cách Rust quản lý bộ nhớ. Họ tạo ra hệ thống “quyền sở hữu” (ownership), trong đó mỗi phần dữ liệu chỉ có một chủ sở hữu, và compiler buộc chương trình phải tuân theo hệ thống này.

Nhiều thứ trong Rust năm 2010 đã không trụ lại được, và các ghi chú phát hành (release notes) lưu lại từng lần cắt bỏ. Typestate bị gỡ bỏ ở phiên bản 0.4 vào tháng 10 năm 2012 — bản phát hành có ghi chú gọi con trỏ mượn (borrowed pointer) là “đã hoàn thiện hơn nhiều và được khuyến nghị sử dụng”. Con trỏ @ — kiểu con trỏ có sẵn trong Rust, do bộ thu gom rác (garbage collector) quản lý — bị loại khỏi ngôn ngữ vào tháng 7 năm 2014, còn kiểu dữ liệu thay thế nằm trong thư viện thì đến tháng 10 cũng bị loại nốt. Ghi chú của bản alpha đầu tiên cho Rust 1.0, phát hành tháng 1 năm 2015, viết rằng Rust “không còn môi trường chạy (runtime) dưới bất kỳ hình thức nào, và chỉ hỗ trợ luồng của hệ điều hành, không hỗ trợ green thread”. Green thread — loại luồng do runtime của ngôn ngữ tự quản lý, từng là nền tảng cho các tác vụ nhẹ năm 2010 — đã không còn; từ đây Rust dùng các luồng do hệ điều hành quản lý.

Hoare không phải là người đưa Rust về đích. Tháng 8 năm 2013, bản tin This Week in Rust cho biết ông đã thôi giữ vị trí trưởng dự án và Brian Anderson sẽ tiếp quản. Rust 1.0 ra mắt ngày 15 tháng 5 năm 2015.

Ngôn ngữ này đã tìm được người dùng. Trong khảo sát lập trình viên năm 2016 của Stack Overflow, Rust đứng đầu danh sách “được yêu thích nhất” với 79,1%, và đến năm 2025 vẫn là ngôn ngữ “được ngưỡng mộ nhất” của khảo sát, với 72%. Linux 6.1, phát hành tháng 12 năm 2022, bổ sung hỗ trợ ban đầu cho việc viết code nhân hệ điều hành (kernel) bằng Rust.

Những gì giai thoại phổ biến về nguồn gốc Rust bỏ qua

Các bài giới thiệu thường chỉ gọi Rust là ngôn ngữ do Mozilla phát triển. Ngay cả bài đăng năm 2020 của nhóm cốt lõi Rust (Rust Core Team) về tương lai của dự án cũng nói rằng Rust “ban đầu được thai nghén vào năm 2010 (tùy cách tính, thậm chí có thể nói là năm 2006!) như một dự án của Mozilla Research”. Chính Hoare lại tính những năm đầu ấy theo cách khác. Năm 2016, ông mô tả Rust là dự án cá nhân từ năm 2006 đến năm 2009, và từ cuối năm 2009 là “một dự án của Mozilla được tiến hành không công khai”.

Các bản kể lại cũng thêm thắt cả chuyện thang máy. Một bản trong số đó viết rằng Hoare “biết lỗi nằm ở ngôn ngữ lập trình”. Theo bài của MIT Technology Review, phần mềm của thang máy đã bị sập, và Hoare biết nhiều vụ sập như vậy bắt nguồn từ cách chương trình dùng bộ nhớ. Bài báo còn đưa ra một nhận xét chung: phần mềm trong những thiết bị như thang máy thường được viết bằng C hoặc C++, những ngôn ngữ khiến lỗi bộ nhớ dễ lọt vào code. Nhưng bài báo không nói điều gì đã làm phần mềm của chiếc thang máy ấy bị sập, cũng không nói rằng Hoare biết ngôn ngữ lập trình là thủ phạm.

Rust mà Hoare nói mình từng muốn

Tháng 6 năm 2023, Hoare đăng một bài blog có tựa đề “The Rust I Wanted Had No Future” (Rust mà tôi muốn đã không có tương lai). Ông liệt kê những lựa chọn mà nếu là ông thì đã làm khác. Trong số đó có việc dùng green thread với ngăn xếp có thể tự nới rộng, thay cho async/await (cú pháp lập trình bất đồng bộ). Một lựa chọn khác là dùng mô-đun như của OCaml và các ngôn ngữ khác thuộc họ ML (Meta Language), thay cho trait (cơ chế định nghĩa hành vi dùng chung cho các kiểu dữ liệu). Ông cũng muốn có lời gọi đuôi (tail call), tham chiếu không cần khai báo vòng đời (lifetime) tường minh, và một kiểu số thập phân có sẵn trong ngôn ngữ. “Lẽ ra tôi đã đánh đổi hiệu năng và khả năng biểu đạt để lấy sự đơn giản”, ông viết. Ông nói thêm rằng sự đánh đổi ấy sẽ đưa ngôn ngữ đi “theo hướng nhìn chung trái ngược với nơi mà rất nhiều người muốn nó đi tới”.

Kết luận của ông: “Rust mà tôi muốn có lẽ đã không có tương lai, hoặc ít nhất thì tương lai ấy cũng kém xa Rust mà chúng ta có được.”

Lịch sử Rust cho thấy gì về các ngôn ngữ mới

Ý tưởng cũ vẫn có thể lấp đầy một ngách bị bỏ ngỏ. Lời chào hàng năm 2010 của Hoare dựa vào những ngôn ngữ cũ hơn. Các slide của ông viết rằng ai cũng đang “né” ngách ngôn ngữ “tĩnh, có cấu trúc, xử lý đồng thời, dành cho hệ thống lớn” — địa hạt của C++, ngôn ngữ mà một slide gọi là “đã quá hạn sử dụng từ lâu”.

Người gọi tên vấn đề không nhất thiết phải là người quyết định mọi sự đánh đổi. Rust bắt đầu từ nỗi bực bội của Hoare. Hệ thống typestate bị bỏ khi ông vẫn còn dẫn dắt dự án; còn con trỏ dùng bộ thu gom rác và green thread thì bị bỏ sau khi ông đã thôi làm trưởng dự án.

Chiếc thang máy giải thích vì sao Rust ra đời. Các ghi chú phát hành cho thấy Rust đã đi đến bản 1.0 như thế nào. Còn bài blog của Hoare trả lời câu hỏi “nếu như”: “Đừng rước xui bằng cách tưởng tượng rằng tôi mà làm thì đã tốt hơn!”

Bài liên quan

Đọc bằng ngôn ngữ khác: English

Nguồn