Crabtime - Vamos usar o Comptime do Zig no Rust
(crates.io)- Macro que avalia lógica Rust inline em tempo de compilação para gerar e adicionar novo código
- Oferece mais flexibilidade e desempenho do que macros procedurais, ao mesmo tempo em que é mais fácil e natural de ler e escrever do que
macro_rules - Suporta tanto entrada quanto saída com Token Stream/Macro Fragments/código Rust
- Suporte a IDE, formatação de código, definição inline e excelente legibilidade
- One-shot eval: permite lidar facilmente com operações complexas em tempo de compilação
const MY_NUM: usize = crabtime::eval! { (std::f32::consts::PI.sqrt() * 10.0).round() as usize }; - Macros no estilo função (Function-like Macros)
- É possível definir macros no estilo função com
#[crabtime::function] - A função definida é convertida em macro e executada no momento do build
- É possível exportar a macro usando o atributo padrão
#[macro_export]
- É possível definir macros no estilo função com
- A função em que a macro é definida é inserida na função
mainde um projeto Rust temporário - Após a compilação, o código gerado é retornado via
stdout
1 comentários
Comentários do Hacker News**
proc_macroexigir um crate separado, e o Crabtime parece resolver issocomptimedo Zig, mais como uma versão estendida de avaliação simples em tempo de compilaçãoRustDoc, para obter informações de tipocomptimecomptimedo Zig é mais fácil de entender e depurar porque não é uma macro sintáticacomptimejá pode substituir muitos outros recursos de linguagem, deixando a própria linguagem mais simplescomptimea uma linguagem complexa dificulta obter os benefícios de simplicidade que o Zig temsyn, então há muita coisa para aprenderpaste!{}ecrabtime::output!{}, considera a segunda muito mais intuitivafordo Rust, em vez de padrões de macro complexosmacro_rulese acabou escrevendo todo o código manualmenteproc_macro, mas normalmente é preciso adicionar dependências comosyn,quoteeproc_macro2, o que considera insatisfatório