6 पॉइंट द्वारा xguru 2025-03-26 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 के main function में insert किया जाता है
  • compile होने के बाद generate किया गया code stdout के ज़रिए return होता है

1 टिप्पणियां

 
GN⁺ 2025-03-26

Hacker News टिप्पणियाँ**

  • weinzierl
    • Crabtime के लोगो की तारीफ़ की, और Rust macro को आसान बनाने की कोशिश की सराहना की
    • proc_macro के लिए अलग crate की ज़रूरत असुविधाजनक लगती थी, और Crabtime इसे हल करता हुआ दिखता है
    • लेकिन Crabtime, Zig के comptime से अलग, सिर्फ compile-time evaluation फीचर का एक विस्तारित रूप लगता है
    • Zig और Rust के बीच बड़ा अंतर type information तक पहुँच की उपलब्धता है; Zig में यह संभव है, लेकिन Rust में नहीं
    • Rust में type information पाने के लिए RustDoc parsing जैसे workaround इस्तेमाल किए जा रहे हैं
    • Crabtime type reflection फीचर देता हुआ नहीं दिखता, और इस फीचर के बिना इसे असली comptime implementation मानना कठिन है
    • pron
      • Zig का comptime syntax macro नहीं है, इसलिए उसे समझना और debug करना आसान है
      • यह runtime पर चलने वाले function की तरह काम करता है, और मजबूत reflection के साथ आंशिक रूप से typed language जैसा व्यवहार करता है
      • सिर्फ comptime फीचर ही कई दूसरी language features की जगह ले सकता है, इसलिए भाषा खुद अधिक सरल हो जाती है
      • Zig, C-स्तर की सरलता बनाए रखते हुए भी C++-स्तर की expressive power देता है
      • जटिल भाषा में comptime जोड़ने से Zig जैसी सरलता के फायदे पाना मुश्किल है
  • pjmlp
    • C++ में metaprogramming के विकास का सकारात्मक मूल्यांकन किया
    • C++98 के template hacking से शुरू होकर C++23 में यह व्यावहारिक स्तर तक विकसित हो चुका है
    • आगे compile-time reflection आने पर यह और बेहतर होगा
    • Rust में हर macro की syntax अलग होती है, या syn जैसे external crate पर निर्भर रहना पड़ता है, इसलिए सीखने के लिए बहुत कुछ है
  • nindalf
    • declarative macro से लिखे benchmark generation code को Crabtime में दोबारा लिखकर संतोषजनक अनुभव किया
    • Crabtime इस्तेमाल करते समय ज़्यादातर code Rust की तरह लिखा जा सकता है, इसलिए readability और customization बेहतर होती है
    • पहले हर बार module name पास करना पड़ता था, लेकिन अब disk से file पढ़कर उसे process किया जा सकता है
    • paste!{} और crabtime::output!{} के उपयोग की तुलना में, बाद वाले को कहीं ज़्यादा सहज बताया
    • loop syntax में भी जटिल macro pattern की जगह Rust की for syntax सीधे इस्तेमाल की जा सकती है
    • Crabtime की वजह से Rust metaprogramming को लेकर ज़्यादा आत्मविश्वास महसूस हुआ
    • पुराना version कुछ हफ़्ते पहले और नया version दो दिन पहले जारी हुआ था, इसलिए users अभी बहुत ज़्यादा नहीं हैं
    • पहले लिखे macro को वह खुद भी ठीक से नहीं समझ पाता था, लेकिन Crabtime के साथ उसे साफ़ तौर पर लिखना और maintain करना संभव हुआ
  • orman784
    • जटिल macro लिखने की ज़रूरत वाले हालात में macro_rules की सीमाएँ महसूस हुईं, इसलिए पूरा code सीधे खुद लिखा
    • proc_macro का इस्तेमाल टालना चाहते हैं, लेकिन आम तौर पर syn, quote, proc_macro2 जैसी dependencies जोड़नी पड़ती हैं, जिससे असंतोष है
    • Crabtime इसे हल कर पाएगा या नहीं, यह टेस्ट करके देखना चाहते हैं
    • dependency कितनी बढ़ेगी यह अभी नहीं देखा, लेकिन संभव हो तो उसे कम रखना चाहते हैं