Tình hình phát triển trình biên dịch Rust dựa trên GCC
- gccrs, dự án trình biên dịch Rust dựa trên GCC, được khởi động vào năm 2014 với mục tiêu hiện thực hóa một trình biên dịch Rust bên trong GNU Compiler Collection (GCC).
- Mục tiêu của gccrs là được đưa vào bản phát hành GCC 13, nhưng điều này đã không đạt được; hiện tại dự án đang hướng tới việc được đưa vào GCC 14 (dự kiến phát hành vào giữa năm 2024).
- gccrs nhắm tới Rust phiên bản 1.49, đây là phiên bản cuối cùng trước khi
const generics được giới thiệu.
- Một trong những nguyên tắc quan trọng của dự án gccrs là không tạo ra một "superset" của Rust, mà tái tạo nguyên vẹn đầu ra của
rustc.
- Thư viện chuẩn Rust được cấu thành từ nhiều "crate", và gccrs hiện tập trung vào việc hỗ trợ biên dịch các crate
core và alloc trong số đó.
- Hiện tại gccrs vẫn chưa thể biên dịch các crate này do còn thiếu nhiều tính năng; trong đó vấn đề gồm sự vắng mặt của borrow checker và thiếu các LLVM intrinsics mà GCC không hỗ trợ.
Tận dụng lợi thế của hệ sinh thái GCC
- Một trong những lý do chính để phát triển gccrs là cho phép tận dụng các plugin bảo mật của GCC.
- gccrs đã được sử dụng trong cộng đồng homebrew Sega Dreamcast, nơi có thể dùng plugin GCC để thực hiện phân tích tĩnh với mã Rust
unsafe.
- Thông qua nỗ lực gccrs, dự án đã có thể đóng góp các tính năng bổ sung cho đặc tả Rust và mong muốn tham gia vào công việc xây dựng đặc tả chính thức của Rust.
Các tính năng đang được phát triển
- gccrs vẫn còn thiếu nhiều tính năng cốt lõi, bao gồm async/await, các LLVM intrinsics còn thiếu trong GCC, và macro
format_args!().
- Dự án Polonius triển khai một borrow checker tính toán vòng đời tham chiếu bằng thuật toán khác nhằm khắc phục các hạn chế của borrow checker hiện tại trong
rustc.
- Công việc với macro
format_args!() đã được bắt đầu; đây là thành phần cần thiết để tạo các đối số được truyền cho những macro định dạng chuỗi khác.
rustc_codegen_gcc
- rustc_codegen_gcc là một dự án Rust dựa trên GCC khác, trưởng thành hơn gccrs và có phạm vi hẹp hơn.
- rustc_codegen_gcc sử dụng thư viện
libgccjit để kết nối với API backend LLVM của rustc, và thực hiện biên dịch ở các giai đoạn muộn của rustc và GCC.
- Tính đến tháng 10 năm 2023,
rustc_codegen_gcc có thể biên dịch Rust for Linux mà không cần các bản vá bổ sung.
Rust for Linux
- Dự án Rust for Linux cung cấp tài liệu về cách build mã Rust cho kernel bằng
rustc hoặc rustc_codegen_gcc.
- gccrs cũng hướng tới việc hỗ trợ Rust for Linux, nhưng điều này hiện vẫn có vẻ xa vời do khoảng cách lớn với phiên bản
rustc đang được hỗ trợ.
Ý kiến của GN⁺
- Dự án gccrs hướng tới việc hiện thực hóa một trình biên dịch Rust dựa trên GCC, qua đó mang lại sự đa dạng cho hệ sinh thái Rust và có tiềm năng tận dụng các công cụ sẵn có như plugin bảo mật của GCC.
- Dù gccrs vẫn chưa thể biên dịch các phần cốt lõi của thư viện chuẩn Rust, việc đã có trường hợp sử dụng thực tế trong cộng đồng homebrew Sega Dreamcast là điều đáng chú ý.
- Bài viết này mang đến góc nhìn thú vị về các triển khai trình biên dịch khác nhau của ngôn ngữ Rust và khả năng mở rộng hệ sinh thái đi kèm.
1 bình luận
Ý kiến Hacker News
Tóm tắt bình luận thứ nhất:
Tóm tắt bình luận thứ hai:
Tóm tắt bình luận thứ ba:
Tóm tắt bình luận thứ tư:
Tóm tắt bình luận thứ năm:
Tóm tắt bình luận thứ sáu:
Tóm tắt bình luận thứ bảy: