Crabtime - Utiliser le Comptime de Zig dans Rust
(crates.io)- Une macro qui évalue une logique Rust inline au moment de la compilation afin de générer et ajouter du nouveau code
- Offre davantage de flexibilité et de performances que les macros procédurales, tout en étant plus simple et plus naturelle à lire et à écrire que
macro_rules - Prend en charge les entrées/sorties en Token Stream, Macro Fragments et code Rust
- Prise en charge de l’IDE, formatage du code, définition inline possible et excellente lisibilité
- One-shot eval : permet de gérer simplement des calculs complexes au moment de la compilation
const MY_NUM: usize = crabtime::eval! { (std::f32::consts::PI.sqrt() * 10.0).round() as usize }; - Macros de type fonction (Function-like Macros)
- Possibilité de définir des macros de type fonction avec
#[crabtime::function] - La fonction définie est transformée en macro et exécutée au moment du build
- Possibilité d’exporter la macro avec l’attribut standard
#[macro_export]
- Possibilité de définir des macros de type fonction avec
- La fonction définie pour la macro est insérée dans la fonction
maind’un projet Rust temporaire - Après compilation, le code généré est renvoyé via
stdout
1 commentaires
Commentaires sur Hacker News**
proc_macronécessite une crate séparée, et Crabtime semble résoudre ce problèmecomptimede Zig et davantage s’apparenter à une version étendue de la simple évaluation à la compilationRustDocpour obtenir des informations de typecomptimecomptimede Zig est plus facile à comprendre et à déboguer parce que ce n’est pas une macro syntaxiquecomptimepeut remplacer de nombreuses autres fonctionnalités du langage, ce qui simplifie le langage lui-mêmecomptimeà un langage complexe rend difficile l’obtention des avantages de simplicité que Zig procuresyn, ce qui fait qu’il y a beaucoup de choses à apprendrepaste!{}etcrabtime::output!{}, il juge le second bien plus intuitifforde Rust au lieu de motifs de macros complexesmacro_ruleset a fini par écrire directement tout le codeproc_macro, mais cela oblige généralement à ajouter des dépendances commesyn,quoteetproc_macro2, ce qui le satisfait peu