Crabtime - Usemos el Comptime de Zig en Rust
(crates.io)- Macro que evalúa lógica Rust inline en tiempo de compilación para generar y agregar código nuevo
- Ofrece más flexibilidad y rendimiento que las macros procedurales, y al mismo tiempo es más fácil y natural de leer y escribir que
macro_rules - Soporta tanto entrada como salida con Token Stream / Macro Fragments / código Rust
- Soporte de IDE, formato de código, posibilidad de definirlo inline y excelente legibilidad
- One-shot eval: permite manejar fácilmente operaciones complejas en tiempo de compilación
const MY_NUM: usize = crabtime::eval! { (std::f32::consts::PI.sqrt() * 10.0).round() as usize }; - Macros de tipo función (Function-like Macros)
- Se pueden definir con
#[crabtime::function] - La función definida se convierte en macro y se ejecuta en tiempo de build
- Se puede exportar la macro usando el atributo estándar
#[macro_export]
- Se pueden definir con
- La función donde se define la macro se inserta en la función
mainde un proyecto Rust temporal - Después de compilar, el código generado se devuelve a través de
stdout
1 comentarios
Comentarios en Hacker News**
proc_macrorequiriera un crate separado, y Crabtime parece resolver esocomptimede Zig, Crabtime parece más bien una versión ampliada de la evaluación en tiempo de compilaciónRustDocpara obtener información de tiposcomptimecomptimede Zig es más fácil de entender y depurar porque no es una macro sintácticacomptimepuede reemplazar muchas otras características del lenguaje, lo que hace que el lenguaje en sí sea más simplecomptimea un lenguaje complejo dificulta obtener las ventajas de simplicidad que sí tiene Zigsyn, así que hay mucho que aprenderpaste!{}concrabtime::output!{}, considera que este último es mucho más intuitivoforde Rust tal cual, en lugar de patrones de macros complejos para los buclesmacro_rulesy terminó escribiendo todo el código directamenteproc_macro, pero normalmente hay que agregar dependencias comosyn,quoteyproc_macro2, lo que no le convence