2 điểm bởi GN⁺ 2023-12-19 | 1 bình luận | Chia sẻ qua WhatsApp

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 corealloc 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

 
GN⁺ 2023-12-19
Ý kiến Hacker News
  • Tóm tắt bình luận thứ nhất:

    • Cảm thấy bài viết đưa ra lập luận chưa đủ mạnh về động cơ phát triển gccrs.
    • gccrs đang được phát triển để tận dụng các plugin bảo mật của GCC.
    • Sáng kiến 'Rust for Linux' bổ sung hỗ trợ Rust cho nhân Linux cũng là một lý do khác.
    • Đây là động lực quan trọng vì có nhiều nhà phát triển kernel muốn biên dịch nhân Linux chỉ bằng toolchain GNU.
    • Bài viết có giải thích lý do dùng GCC làm backend, nhưng chưa giải thích đầy đủ vì sao cần một frontend trùng lặp.
    • Cần rút kinh nghiệm từ những sai lầm của C++, và việc có nhiều frontend khác nhau khiến phát triển đa nền tảng khó khăn hơn.
    • gccrs đang cẩn trọng để không trở thành 'GNU Rust', và cố gắng tái tạo đầu ra của rustc.
  • Tóm tắt bình luận thứ hai:

    • Rust cần có tiêu chuẩn ngôn ngữ.
    • Nhiều tổ chức và ngành công nghiệp sẽ không chấp nhận Rust nếu không có tiêu chuẩn.
    • Các ngôn ngữ khác như C, C++, C#, JavaScript (ECMAScript) đều có tiêu chuẩn.
  • Tóm tắt bình luận thứ ba:

    • Ngạc nhiên trước phản ứng tiêu cực đối với GCC-RS.
    • Nếu một ngôn ngữ không có nhiều cách triển khai, thì ngôn ngữ đó là chưa hoàn chỉnh.
  • Tóm tắt bình luận thứ tư:

    • gccrs sẽ giúp Rust hỗ trợ các kiến trúc mà LLVM không hỗ trợ.
  • Tóm tắt bình luận thứ năm:

    • Cho rằng việc gccrs cố tái tạo cả lỗi và những điểm kỳ quặc của rustc là một sai lầm.
    • Rust không có đặc tả chính thức, và việc chỉ dựa vào một triển khai tham chiếu duy nhất để làm tài liệu là một điểm yếu dài hạn.
    • Việc muốn mã hiện có chạy được trên mọi triển khai là hợp lý, nhưng điều đó có vấn đề là sẽ làm các quyết định sai và lỗi bị duy trì vĩnh viễn.
    • Microsoft đã bỏ nhiều công sức để các chương trình cũ vẫn tiếp tục chạy.
    • Rust không nên gánh vác gánh nặng này khi vẫn còn ở giai đoạn đầu phát triển ngôn ngữ.
    • Để ngôn ngữ có thể tiến hóa, cần chấp nhận QA và QC.
    • Các ngôn ngữ có tiêu chuẩn mạnh đều chấp nhận niềm tin này.
  • Tóm tắt bình luận thứ sáu:

    • Cảm ơn vì đã đăng liên kết lwn.net và nhắc họ gia hạn đăng ký.
  • Tóm tắt bình luận thứ bảy:

    • Linux đã có thể được biên dịch bằng clang.
    • Có vẻ không đáng để phát triển và duy trì nỗ lực trùng lặp này chỉ vì sự 'thuần khiết' của GNU.