Khi Rust kỷ niệm 10 năm thành lập và định vị mình là ngôn ngữ hàng đầu cho phần mềm nền tảng, cộng đồng đang tham gia vào những cuộc thảo luận sôi nổi về hai phần quan trọng còn thiếu: một Application Binary Interface (ABI) ổn định và một đặc tả ngôn ngữ được công bố. Những cuộc tranh luận này đã xuất hiện sau các thảo luận gần đây về hướng phát triển tương lai của Rust và tham vọng cung cấp năng lượng cho phần mềm làm nền tảng cho mọi thứ khác.
Thách thức ABI: Vượt ra ngoài extern C
Mối quan tâm kỹ thuật cấp bách nhất được các nhà phát triển đưa ra tập trung vào việc Rust thiếu một ABI toàn diện. Hiện tại, Rust chỉ có thể cung cấp extern C cho giao tiếp giữa các ngôn ngữ, điều này hạn chế nghiêm trọng mức độ hữu ích của các thư viện động trong các hệ thống phức tạp. Điều này trở nên đặc biệt có vấn đề khi xây dựng hệ điều hành hoặc phần mềm nền tảng quy mô lớn cần cung cấp các dịch vụ phong phú cho các ứng dụng.
Thách thức này rất lớn vì một ABI phù hợp sẽ cho phép các phần khác nhau của hệ thống giao tiếp mà không cần biên dịch lại khi các thành phần được nâng cấp. Các nền tảng khác đã giải quyết vấn đề này theo nhiều cách khác nhau - Windows sử dụng COM, Apple trong lịch sử dựa vào dynamic dispatch của Objective-C, và Android sử dụng JVM với bytecode. Tuy nhiên, việc tạo ra một ABI mà không có lớp máy ảo là cực kỳ khó khăn và đòi hỏi phải cam kết với các chi tiết triển khai không bao giờ có thể thay đổi.
Cách tiếp cận của Swift đã nổi lên như một mô hình tiềm năng, cung cấp monomorphization trong cùng một binary, dynamic dispatch qua các ranh giới linker. Điều này có nghĩa là hệ thống generics mạnh mẽ của Rust có thể hoạt động trong một chương trình duy nhất trong khi vẫn cho phép các chương trình khác nhau giao tiếp hiệu quả. Độ phức tạp kỹ thuật là rất lớn, nhưng lợi ích có thể biến đổi tính hữu dụng của Rust cho lập trình cấp hệ thống.
ABI: Application Binary Interface - giao diện cấp thấp giữa các thành phần phần mềm khác nhau cho phép chúng hoạt động cùng nhau
Các Giải Pháp ABI Ngôn Ngữ Thay Thế:
- Windows: COM ( Component Object Model )
- Apple: Objective-C dynamic dispatch, Swift ABI
- Android: Giao diện JVM bytecode
- C3 Language: Chuyển đổi ABI tự động cho các kiểu tùy chọn
Tranh cãi về Đặc tả
Một vấn đề gây tranh cãi không kém liên quan đến việc Rust thiếu một tiêu chuẩn ngôn ngữ chính thức, được công bố. Các nhà phê bình cho rằng bất kỳ ngôn ngữ nào nhắm đến phần mềm nền tảng đều nên có các đặc tả phù hợp cho phép triển khai và xác thực độc lập. Tình hình hiện tại để lại việc triển khai tham chiếu của Rust như tiêu chuẩn de facto, điều mà một số người coi là không đầy đủ cho cơ sở hạ tầng quan trọng.
Dự án Rust đã làm việc trên một đặc tả từ năm 2023, nhưng tiến độ chậm và nỗ lực này đã phải đối mặt với những thất bại đáng kể. Kế hoạch ban đầu được mô tả trong RFC3355 đã bị từ bỏ vào đầu năm 2024, và nhóm chịu trách nhiệm đã trải qua sự thay đổi nhân sự gần như hoàn toàn. Thậm chí còn đáng lo ngại hơn đối với các nhà phê bình là đặc tả được lên kế hoạch sẽ không có thẩm quyền - việc triển khai vẫn sẽ được coi là tiêu chuẩn thực sự.
Nếu bạn đang hướng đến việc trở thành nền tảng của cả một ngành công nghiệp, việc yêu cầu một số đặc tả dường như không phải là không hợp lý.
Tình hình này tạo ra một sự tương phản rõ rệt với các ngôn ngữ như C và C++, có các cơ quan tiêu chuẩn chính thức và nhiều triển khai. Tuy nhiên, những người bảo vệ chỉ ra rằng các ngôn ngữ thành công như Python hoạt động tương tự như Rust, với việc triển khai tham chiếu đóng vai trò là tiêu chuẩn. Cuộc tranh luận phản ánh những câu hỏi sâu sắc hơn về mức độ chính thức thực sự cần thiết cho phần mềm nền tảng.
Tình trạng đặc tả Rust (tính đến năm 2025):
- Kế hoạch RFC3355 ban đầu đã bị từ bỏ vào đầu năm 2024
- Nhóm đặc tả đã trải qua sự thay đổi hoàn toàn về thành viên
- Đặc tả được lên kế hoạch sẽ không có tính chất ủy quyền (việc triển khai vẫn là tiêu chuẩn)
- Tài liệu tham khảo đang trong quá trình phát triển có sẵn nhưng chưa hoàn thiện
- Không có tiêu chuẩn chính thức nào được công bố
Sự thất vọng của Cộng đồng và Các vấn đề Cốt lõi
Ngoài những mối quan tâm kiến trúc lớn này, các nhà phát triển đã xác định một số điểm đau dai dẳng ảnh hưởng đến năng suất hàng ngày. Các struct tự tham chiếu vẫn khó triển khai, đặc biệt khi cố gắng lưu trữ cả dữ liệu nguồn và kết quả được phân tích trong cùng một cấu trúc. Quy tắc orphan, mặc dù được thiết kế để ngăn chặn xung đột, thường buộc các nhà phát triển phải sử dụng các giải pháp thay thế khó xử với các loại wrapper lồng nhau.
Thời gian biên dịch tiếp tục là một vấn đề đáng kể, thường yêu cầu các dự án phải được chia thành nhiều crate nhỏ để có hiệu suất build hợp lý. Sự phân mảnh này làm tổn hại đến tổ chức mã và trải nghiệm nhà phát triển, mặc dù các lý do kỹ thuật cơ bản được hiểu rõ.
Những vấn đề này làm nổi bật một căng thẳng cơ bản trong phát triển Rust. Trong khi ngôn ngữ này xuất sắc trong việc ngăn chặn toàn bộ các lớp lỗi và cho phép đồng thời không sợ hãi, chính những tính năng cung cấp những lợi ích này có thể tạo ra ma sát trong các nhiệm vụ phát triển hàng ngày.
Các Lựa Chọn Giao Tiếp Đa Ngôn Ngữ Hiện Tại Của Rust:
- extern "C" - Giới hạn ở các kiểu dữ liệu tương thích với C
- Không có hỗ trợ native cho Option/Result/Enum qua các ranh giới
- Không có ABI ổn định cho các kiểu native của Rust như slices hoặc trait objects
- Thư viện động yêu cầu giao diện kiểu C
Nhìn về Tương lai
Các cuộc thảo luận tiết lộ một cộng đồng đang vật lộn với thành công và kỳ vọng ngày càng tăng. Khi Rust được áp dụng trong các hệ thống quan trọng - từ kernel hệ điều hành đến cơ sở hạ tầng đám mây - mức độ quan trọng của việc giải quyết đúng những vấn đề nền tảng này tiếp tục tăng lên. Thách thức nằm ở việc giải quyết những mối quan tâm này mà không làm tổn hại đến các đặc tính an toàn và hiệu suất khiến Rust trở nên hấp dẫn ngay từ đầu.
Dù thông qua đổi mới kỹ thuật như các giải pháp ABI kiểu Swift hay thay đổi tổ chức xung quanh đặc tả và tiêu chuẩn, hệ sinh thái Rust đối mặt với những quyết định quan trọng về cách trưởng thành trong khi duy trì những điểm mạnh cốt lõi. Kết quả của những cuộc tranh luận này có khả năng sẽ quyết định liệu Rust có thể thực sự hoàn thành tham vọng trở thành nền tảng cho thế hệ tiếp theo của các hệ thống phần mềm quan trọng hay không.