Cha đẻ Valen hiện thực hóa 'Golden Spike' kết nối ngôn ngữ mới với Rust

Công nghệ25 tháng 9, 2026·4 phút đọc

Evan Ovadia, cựu kỹ sư Google và là cộng tác viên cốt lõi của Mojo, đang thử nghiệm phương pháp giúp các ngôn ngữ lập trình mới tận dụng thư viện Rust mà không cần qua lớp trung gian C ABI. Thành tựu này được ví như 'Golden Spike' — cột mốc nối liền hai hệ sinh thái ngôn ngữ vốn tách biệt.

Cha đẻ Valen hiện thực hóa 'Golden Spike' kết nối ngôn ngữ mới với Rust

Cha đẻ Valen hiện thực hóa 'Golden Spike' kết nối ngôn ngữ mới với Rust

Evan Ovadia, cựu kỹ sư Google và là cộng tác viên cốt lõi của ngôn ngữ Mojo, vừa công bố một thử nghiệm mang tính đột phá: biến Rust thành thư viện mà các ngôn ngữ khác có thể xây dựng dựa trên đó. Thành tựu này cho phép truyền các kiểu dữ liệu generic và hàm giữa Rust với một ngôn ngữ khác — điều mà giao diện nhị phân C (C ABI) hiện tại không thể làm được.

Đây không chỉ là một thắng lợi kỹ thuật đơn thuần. Nó mở ra viễn cảnh các ngôn ngữ mới có thể kế thừa trực tiếp hệ sinh thái thư viện phong phú của Rust mà không phải chịu cảnh "cắt gọt" dữ liệu xuống dạng nguyên thủy thô sơ.

Vấn đề: C ABI không hiểu generic

Hiện nay, cách phổ biến để dùng thư viện của ngôn ngữ này trong chương trình viết bằng ngôn ngữ khác là thông qua C ABI — lớp tương tác nhị phân quy ước cách truyền dữ liệu và gọi hàm giữa mã đã biên dịch. Nếu một thư viện Rust công khai hàm dưới dạng extern "C" và kiểu dữ liệu dưới dạng repr(C), ngôn ngữ khác có thể truy cập qua Giao diện hàm ngoại vi (FFI).

Vấn đề nằm ở chỗ C không hiểu khái niệm generic — tức các kiểu dữ liệu sẽ được cung cấp sau. Trong khi đó, cả Rust lẫn Valen (ngôn ngữ do Ovadia phát triển) đều sử dụng generic rất nhiều, dù theo cách khác nhau.

"Câu hỏi trung tâm, bí ẩn cần giải quyết, là làm sao thực hiện generic xuyên ngôn ngữ?" — Ovadia viết trong bài blog giải thích.

Giải pháp hai bước

Việc bắt hai trình biên dịch hợp tác với nhau cực kỳ khó khăn, vì mỗi trình biên dịch vốn là một "vị vua" riêng biệt trong thế giới của chính nó. Ovadia đã mất nhiều thời gian suy nghĩ trước khi đi đến giải pháp gồm hai phần:

  • Chạy trình biên dịch Rust như một thư viện. Điều bất ngờ là Rust đã có sẵn khả năng này qua rustc_driver, cho phép Valen nhúng rustc trực tiếp vào không gian bộ nhớ của mình.
  • Vá Rust để bàn giao quyền kiểm soát. Khi Rust gặp kiểu dữ liệu Valen không phải của Rust, nó sẽ chuyển quyền cho trình biên dịch Valen xử lý phần tương ứng, rồi chờ kết quả đã biên dịch.

Ovadia thừa nhận việc vá trình biên dịch Rust là "phương án hạt nhân".

"Thành thật mà nói, đây là phần rủi ro nhất của toàn bộ nỗ lực," ông viết. Bản vá chỉ khoảng 100 dòng mã, nhưng khá "hack" và giả định Rust đang dùng LLVM để sinh mã máy — điều không phải lúc nào cũng đúng. "Nó hoạt động, nhưng chắc chắn không thể đưa vào upstream."

Ý nghĩa với cộng đồng lập trình

Dù còn nhiều hạn chế, generic xuyên ngôn ngữ hai chiều của Ovadia là bước tiến thực sự trong lĩnh vực tương tác ngôn ngữ lập trình. Nó mở ra khả năng dùng Rust để "khởi động" (bootstrap) các ngôn ngữ mới, tận dụng trực tiếp thư viện Rust thay vì phải viết lại từ đầu.

Trên các diễn đàn lập trình như Reddit và Lobste.rs, giới quan sát khen ngợi Ovadia vì đã giải quyết một bài toán hết sức khó nhằn, dù vẫn băn khoăn về chi tiết triển khai.

Một bình luận viết: "Tôi đánh giá cao việc thay thế C với vai trò 'ngôn ngữ FFI phổ quát'. Đây là lựa chọn táo bạo và sẽ đòi hỏi nhiều công sức."

Người khác lại cho rằng Rust có thể không phải ngôn ngữ lý tưởng cho việc tương tác, do những hạn chế trong hệ thống kiểu của chính nó. "Tuy nhiên, hãy tưởng tượng bạn có thể xây dựng binding trên nền Ada! Điều đó mới thực sự tuyệt vời," họ viết.

Góc nhìn cho lập trình viên Việt Nam

Với cộng đồng lập trình viên Việt Nam đang ngày càng tiếp cận Rust — đặc biệt trong các dự án backend hiệu năng cao, blockchain và hệ thống nhúng — những tiến bộ trong tương tác xuyên ngôn ngữ có ý nghĩa thiết thực. Việc tái sử dụng thư viện Rust chất lượng cao trong các ngôn ngữ khác có thể giúp rút ngắn thời gian phát triển, giảm chi phí và tận dụng tối đa hệ sinh thái mã nguồn mở đã được kiểm chứng.

Với vài sửa đổi cho chính Rust, sự phụ thuộc vào C ABI già cỗi có thể một ngày nào đó sẽ trở thành quá khứ.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗