Crabtime – Zigs Comptime in Rust nutzen
(crates.io)- Ein Makro, das zur Compile-Zeit inline Rust-Logik auswertet und neuen Code erzeugt und hinzufügt
- Bietet mehr Flexibilität und Performance als prozedurale Makros und ist zugleich leichter und natürlicher zu lesen und zu schreiben als
macro_rules - Unterstützt Ein- und Ausgabe sowohl als Token Stream/Macro Fragments als auch als Rust-Code
- IDE-Unterstützung, Code-Formatierung, inline definierbar und sehr gut lesbar
- One-shot-Eval: Komplexe Compile-Time-Berechnungen lassen sich einfach verarbeiten
const MY_NUM: usize = crabtime::eval! { (std::f32::consts::PI.sqrt() * 10.0).round() as usize }; - Funktionsartige Makros (Function-like Macros)
- Mit
#[crabtime::function]lassen sich funktionsartige Makros definieren - Die definierte Funktion wird in ein Makro umgewandelt und beim Build ausgeführt
- Mit dem standardmäßigen Attribut
#[macro_export]lässt sich das Makro exportieren
- Mit
- Die für das Makro definierte Funktion wird in die
main-Funktion eines temporären Rust-Projekts eingefügt - Der nach dem Kompilieren erzeugte Code wird über
stdoutzurückgegeben
1 Kommentare
Hacker-News-Kommentare**
proc_macroein separates Crate benötigt, war unpraktisch; Crabtime scheint das zu lösencomptimeeher wie eine erweiterte Form einfacher Compile-Time-AuswertungRustDocverwendet, um an Typinformationen zu kommencomptime-Implementierung zu sehencomptimeist kein Syntax-Makro, daher leichter zu verstehen und zu debuggencomptime-Funktion kann viele andere Sprachfeatures ersetzen, wodurch die Sprache selbst einfacher wirdcomptimezu einer komplexen Sprache hinzuzufügen, bringt kaum die Vorteile an Einfachheit, die Zig bietetsynangewiesen, daher gibt es viel zu lernenpaste!{}undcrabtime::output!{}wird Letzteres als deutlich intuitiver bewertetfor-Syntax verwendenmacro_rulesallein an Grenzen stößt, weshalb der gesamte Code direkt geschrieben wurdeproc_macromöchte man vermeiden, ist aber meist gezwungen, Abhängigkeiten wiesyn,quoteundproc_macro2hinzuzufügen, was unbefriedigend ist