6 points par xguru 2025-03-26 | 1 commentaires | Partager sur WhatsApp
  • 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]
  • La fonction définie pour la macro est insérée dans la fonction main d’un projet Rust temporaire
  • Après compilation, le code généré est renvoyé via stdout

1 commentaires

 
GN⁺ 2025-03-26

Commentaires sur Hacker News**

  • weinzierl
    • Fait l’éloge du logo de Crabtime et de sa tentative de simplifier la création de macros Rust
    • Trouvait gênant que proc_macro nécessite une crate séparée, et Crabtime semble résoudre ce problème
    • Toutefois, Crabtime semble différent du comptime de Zig et davantage s’apparenter à une version étendue de la simple évaluation à la compilation
    • Une grande différence entre Zig et Rust est l’accès aux informations de type : Zig le permet, Rust non
    • Dans Rust, on utilise des contournements comme l’analyse de RustDoc pour obtenir des informations de type
    • Crabtime ne semble pas fournir de fonctionnalité de réflexion sur les types, et sans cela il est difficile de parler d’une véritable implémentation de comptime
    • pron
      • Le comptime de Zig est plus facile à comprendre et à déboguer parce que ce n’est pas une macro syntaxique
      • Il fonctionne comme une fonction exécutée au runtime, tout en agissant comme un langage partiellement typé avec une puissante réflexion
      • La seule fonctionnalité comptime peut remplacer de nombreuses autres fonctionnalités du langage, ce qui simplifie le langage lui-même
      • Zig conserve la simplicité du C tout en offrant un niveau d’expressivité comparable à celui du C++
      • Ajouter comptime à un langage complexe rend difficile l’obtention des avantages de simplicité que Zig procure
  • pjmlp
    • Évalue positivement l’évolution de la métaprogrammation en C++
    • Partie des bricolages de templates en C++98, elle a atteint un niveau pratique en C++23
    • Avec l’arrivée future de la réflexion à la compilation, cela devrait encore progresser
    • Dans Rust, chaque macro a sa propre syntaxe ou dépend de crates externes comme syn, ce qui fait qu’il y a beaucoup de choses à apprendre
  • nindalf
    • A réécrit avec Crabtime du code de génération de benchmarks qu’il avait écrit en macros déclaratives, et l’expérience a été satisfaisante
    • Avec Crabtime, il a pu écrire la majeure partie du code comme du Rust classique, ce qui améliore la lisibilité et la personnalisation
    • Avant, il fallait passer le nom du module à chaque fois, mais désormais il peut lire et traiter des fichiers depuis le disque
    • En comparant l’usage de paste!{} et crabtime::output!{}, il juge le second bien plus intuitif
    • Pour la syntaxe de boucle aussi, il peut utiliser directement la syntaxe for de Rust au lieu de motifs de macros complexes
    • Grâce à Crabtime, il se sent beaucoup plus confiant vis-à-vis de la métaprogrammation en Rust
    • La version précédente a été annoncée il y a quelques semaines, la nouvelle il y a deux jours, donc il n’y a pas encore beaucoup d’utilisateurs
    • Il comprenait lui-même mal les macros qu’il avait écrites auparavant, alors qu’avec Crabtime il peut écrire et maintenir les choses clairement
  • orman784
    • Indique qu’ayant eu besoin d’écrire des macros complexes, il a senti les limites de macro_rules et a fini par écrire directement tout le code
    • Il préfère éviter proc_macro, mais cela oblige généralement à ajouter des dépendances comme syn, quote et proc_macro2, ce qui le satisfait peu
    • Il aimerait tester si Crabtime peut résoudre cela
    • Il n’a pas encore vérifié combien de dépendances cela ajoute, mais il aimerait en réduire le nombre si possible