- compile time पर inline Rust logic को evaluate करके नया code generate कर जोड़ने वाला macro
- Procedural macro की तुलना में ज़्यादा flexibility और performance देता है, और साथ ही
macro_rulesकी तुलना में पढ़ना-लिखना आसान और ज़्यादा natural है - Token Stream/Macro Fragments/Rust code के साथ input और output दोनों को support करता है
- IDE support, code formatting, inline definition की सुविधा, और बेहतरीन readability
- one-shot eval: जटिल compile-time operations को आसानी से संभाल सकता है
const MY_NUM: usize = crabtime::eval! { (std::f32::consts::PI.sqrt() * 10.0).round() as usize }; - function-like macros
#[crabtime::function]से function-like macro define किए जा सकते हैं- define किए गए functions macro में बदल दिए जाते हैं और build time पर execute होते हैं
- standard
#[macro_export]attribute का उपयोग करके macro export किया जा सकता है
- macro के रूप में define किए गए functions को temporary Rust project के
mainfunction में insert किया जाता है - compile होने के बाद generate किया गया code
stdoutके ज़रिए return होता है
1 टिप्पणियां
Hacker News टिप्पणियाँ**
proc_macroके लिए अलग crate की ज़रूरत असुविधाजनक लगती थी, और Crabtime इसे हल करता हुआ दिखता हैcomptimeसे अलग, सिर्फ compile-time evaluation फीचर का एक विस्तारित रूप लगता हैRustDocparsing जैसे workaround इस्तेमाल किए जा रहे हैंcomptimeimplementation मानना कठिन हैcomptimesyntax macro नहीं है, इसलिए उसे समझना और debug करना आसान हैcomptimeफीचर ही कई दूसरी language features की जगह ले सकता है, इसलिए भाषा खुद अधिक सरल हो जाती हैcomptimeजोड़ने से Zig जैसी सरलता के फायदे पाना मुश्किल हैsynजैसे external crate पर निर्भर रहना पड़ता है, इसलिए सीखने के लिए बहुत कुछ हैpaste!{}औरcrabtime::output!{}के उपयोग की तुलना में, बाद वाले को कहीं ज़्यादा सहज बतायाforsyntax सीधे इस्तेमाल की जा सकती हैmacro_rulesकी सीमाएँ महसूस हुईं, इसलिए पूरा code सीधे खुद लिखाproc_macroका इस्तेमाल टालना चाहते हैं, लेकिन आम तौर परsyn,quote,proc_macro2जैसी dependencies जोड़नी पड़ती हैं, जिससे असंतोष है