Cộng đồng lập trình Rust đang tham gia vào các cuộc thảo luận sôi nổi về hiệu suất biên dịch macro sau khi giới thiệu derive-deftly, một crate mới được thiết kế để đơn giản hóa việc tạo macro derive tùy chỉnh. Trong khi công cụ này hứa hẹn sẽ làm cho việc phát triển macro trở nên dễ tiếp cận hơn, các nhà phát triển đang nêu lên mối lo ngại về tác động rộng lớn hơn của việc sử dụng macro đối với thời gian xây dựng và năng suất.
Các tính năng chính của derive-deftly:
- Cú pháp đơn giản hóa để tạo các macro derive tùy chỉnh mà không cần độ phức tạp của procedural macro
- Hỗ trợ cho struct, enum và union
- Phương pháp tiếp cận dựa trên template với các cấu trúc điều khiển
- Không thể chỉnh sửa định nghĩa kiểu dữ liệu gốc (giống như các macro derive tiêu chuẩn)
- Yêu cầu cú pháp
[derive(Deftly)]
và[derive_deftly(TemplateName)]
Sự thất vọng ngày càng tăng với hiệu suất biên dịch macro
Các nhà phát triển Rust ngày càng lên tiếng về các vấn đề thời gian biên dịch do các codebase sử dụng nhiều macro gây ra. Một số nhóm đã bắt đầu thực hiện các biện pháp quyết liệt để giải quyết những vấn đề hiệu suất này. Sự thất vọng đã đạt đến mức mà toàn bộ các nhóm phát triển đang xem xét lại chiến lược sử dụng macro của họ.
Chúng tôi đang dần dần cấm việc sử dụng macro từ monorepo Rust của mình. Các dependency sử dụng nhiều macro cũng sẽ được loại bỏ dần dần.
Tâm lý này phản ánh một xu hướng ngày càng tăng khi sự tiện lợi của macro đang được cân nhắc so với tác động của chúng đối với năng suất của nhà phát triển. Các thư viện phổ biến như Serde, mặc dù được yêu thích vì chức năng của chúng, đang được trích dẫn là những yếu tố đóng góp đáng kể vào thời gian xây dựng chậm làm cản trở công việc phát triển hàng ngày.
Mối quan ngại của cộng đồng:
- Hiệu suất biên dịch: Các codebase sử dụng nhiều macro gây ra sự gia tăng đáng kể thời gian build
- Tích hợp IDE: Cú pháp macro phức tạp gây ra các vấn đề với môi trường phát triển
- Quản lý dependency: Các team đang cân nhắc loại bỏ những dependency sử dụng nhiều macro
- Khoảng trống công cụ: Nhu cầu về các chỉ số thời gian biên dịch trong kho lưu trữ package
Cộng đồng kêu gọi công cụ và số liệu tốt hơn
Cuộc thảo luận đã khơi dậy các lời kêu gọi cải thiện công cụ để giúp các nhà phát triển đưa ra quyết định sáng suốt về việc sử dụng macro. Các nhà phát triển đang yêu cầu các kho lưu trữ gói cung cấp số liệu thời gian biên dịch và thống kê sử dụng macro cho các dependency. Điều này sẽ cho phép các nhóm đánh giá chi phí hiệu suất của việc thêm dependency mới trước khi chúng tác động đến pipeline xây dựng của họ.
Thời điểm của những lo ngại này đặc biệt có ý nghĩa khi Rust tiếp tục phát triển hệ thống macro của mình. Một số thành viên cộng đồng chỉ ra các tính năng ngôn ngữ sắp tới có thể giải quyết các hạn chế hiện tại trong định nghĩa macro khai báo cho derive và attribute macro.
Cân bằng sức mạnh và độ phức tạp trong thiết kế macro
Bất chấp những lo ngại về hiệu suất, có sự công nhận rằng các công cụ như derive-deftly phục vụ một mục đích quan trọng trong hệ sinh thái. Crate này nhằm mục đích thu hẹp khoảng cách giữa sức mạnh của procedural macro và rào cản phức tạp ngăn cản nhiều nhà phát triển tạo ra chức năng derive tùy chỉnh.
Cuộc tranh luận đang diễn ra làm nổi bật một thách thức cơ bản trong lập trình hiện đại: làm thế nào để cung cấp các abstraction mạnh mẽ mà không hy sinh các đặc tính hiệu suất mà các nhà phát triển phụ thuộc vào cho quy trình làm việc hiệu quả. Khi hệ sinh thái Rust tiếp tục trưởng thành, việc tìm ra sự cân bằng phù hợp giữa khả năng biểu đạt và hiệu quả vẫn là một ưu tiên chính cho cả những người tạo ra công cụ và người dùng.
Tham khảo: Introduction: Using derive-deftly for easy derive macros.