Crabtime - Mang `Comptime` của Zig sang Rust
(crates.io)- Macro đánh giá logic Rust nội tuyến ở thời điểm biên dịch để tạo và chèn thêm mã mới
- Cung cấp độ linh hoạt và hiệu năng cao hơn procedural macro, đồng thời dễ đọc và dễ viết hơn
macro_rules - Hỗ trợ cả input/output bằng Token Stream/Macro Fragments/mã Rust
- Có hỗ trợ IDE, định dạng mã, cho phép định nghĩa nội tuyến và có độ dễ đọc cao
- One-shot eval: có thể xử lý đơn giản các phép tính phức tạp ở thời điểm biên dịch
const MY_NUM: usize = crabtime::eval! { (std::f32::consts::PI.sqrt() * 10.0).round() as usize }; - Macro dạng hàm (Function-like Macros)
- Có thể định nghĩa macro dạng hàm bằng
#[crabtime::function] - Hàm đã định nghĩa sẽ được chuyển thành macro và chạy ở thời điểm build
- Có thể export macro bằng thuộc tính chuẩn
#[macro_export]
- Có thể định nghĩa macro dạng hàm bằng
- Hàm được định nghĩa bằng macro sẽ được chèn vào hàm
maincủa một dự án Rust tạm thời - Mã được tạo sau khi biên dịch sẽ được trả về qua
stdout
1 bình luận
Bình luận trên Hacker News**
proc_macrocần một crate riêng, và Crabtime có vẻ như giải quyết được điều nàycomptimecủa Zig, mà giống phiên bản mở rộng của tính năng đánh giá tại thời điểm biên dịch đơn thuần hơnRustDocđể lấy thông tin kiểucomptimethực sựcomptimecủa Zig không phải là macro cú pháp, nên dễ hiểu và dễ debug hơncomptimeđã có thể thay thế nhiều tính năng ngôn ngữ khác, khiến bản thân ngôn ngữ trở nên đơn giản hơncomptimevào một ngôn ngữ phức tạp sẽ khó đạt được lợi ích về tính đơn giản như Zigsyn, nên có rất nhiều thứ phải họcpaste!{}vớicrabtime::output!{}, đánh giá cái sau trực quan hơn nhiềuforcủa Rust thay vì các pattern macro phức tạpmacro_rulesthôi là thấy có giới hạn nên đã trực tiếp tự viết toàn bộ mãproc_macro, nhưng thường vẫn phải thêm các dependency nhưsyn,quote,proc_macro2, nên thấy không hài lòng