Dart/Flutter में अब macros/metaprogramming है

Dart एक experimental macros और metaprogramming system ला रहा है, जो Java के annotation processors जैसा है, और जिसका लक्ष्य Flutter तथा server-side Dart projects में आमतौर पर इस्तेमाल होने वाली boilerplate-heavy code generation का बड़ा हिस्सा replace करना है। प्रतिभागी performance और developer experience में संभावित लाभों को macro complexity, compile-time bloat, और maintainability जैसी परिचित चिंताओं के विरुद्ध तौलते हैं। बातचीत आगे Dart की language ecosystem में स्थिति तक फैलती है—tooling, typing, और Flutter-based cross-platform UI में इसकी मजबूती बनाम non-Flutter libraries में कमजोरियाँ, Flutter की performance (खासकर web और embedded platform views के साथ), और Google की long-term commitment को लेकर अनिश्चितता, जबकि Kotlin/Compose और TypeScript जैसे विकल्प मौजूद हैं।

Macro feature और status

  • लिंक किया गया repo एक demo है; authoritative spec Dart language repo में है।
  • Macros अभी भी experimental/alpha हैं, GA नहीं, लेकिन पहले से SDK master branch में हैं।
  • ये compile-time पर काम करते हैं, runtime reflection से ज़्यादा Java के annotation processors के करीब हैं।
  • इनका उद्देश्य आज की बहुत-सी code generation को replace करना और compiler/AST के साथ बेहतर integrate करना है।

Code generation, reflection, और tooling

  • मौजूदा Dart/Flutter workflows बहुत हद तक codegen (.g.dart, build_runner) पर निर्भर हैं, जिसे कुछ लोग clunky मानते हैं और CI में stale होने में आसान देखते हैं।
  • Macros compile होने से पहले in memory चलने चाहिए और checked-in generated files की ज़रूरत नहीं होगी, जिससे performance और developer experience बेहतर हो सकती है।
  • सामान्य तौर पर macros को लेकर चिंताएँ: unreadable macro-heavy code का जोखिम, compile times का बढ़ना, और “दो भाषाएँ”।
  • Counterpoint: Dart macros normal Dart में लिखे जाते हैं; अलग macro language नहीं है।

Dart की भाषा के रूप में भूमिका

  • इसे instant compilation, strong static typing, null safety, और tooling के लिए सराहा गया।
  • Alternatives से तुलना:
    • Rust/Go के मुकाबले: Dart में GC और exceptions हैं।
    • JavaScript/TypeScript के मुकाबले: Dart statically typed है, JS की legacy quirks के बिना।
  • कई लोग Dart की primary value को Flutter के साथ इसकी tight integration मानते हैं, हालांकि कुछ इसे full-stack और servers के लिए भी इस्तेमाल करते हैं।

Ecosystem, web, और upcoming features

  • आम राय: ecosystem कई ज़रूरतों के लिए पर्याप्त rich है, लेकिन फिर भी JS, Python, या JVM languages से कमजोर है, खासकर Flutter के बाहर।
  • कुछ लोग web apps के लिए TypeScript के एक serious alternative के रूप में Dart चाहते हैं; दूसरों को संदेह है कि यह TS की type expressiveness से आगे निकल पाएगा।
  • नए web APIs, Wasm support, और shared-memory multithreading proposal को promising दिशा के रूप में उल्लेख किया गया है।

Flutter performance और UX

  • performance पर काफ़ी disagreement है:
    • कई लोग mobile/desktop पर smooth, efficient apps की रिपोर्ट करते हैं (खासकर Impeller renderer के साथ)।
    • अन्य लोग high CPU usage (जैसे Cupertino text fields, web demos, ads या webviews जैसे platform views) और janky scrolling का वर्णन करते हैं, खासकर iOS और web पर।
  • इस बात पर सहमति है कि Flutter web native targets की तुलना में कम mature और कम performant है; अगर web primary platform है तो यह ideal नहीं है।

Alternatives और longevity concerns

  • Kotlin/Compose Multiplatform को एक rising competitor के रूप में चर्चा किया गया है, जिसमें native view interoperability बेहतर है, लेकिन यह अभी भी alpha और rough है।
  • कई लोगों ने Google की Dart/Flutter और Fuchsia के प्रति long-term commitment को लेकर चिंता जताई, जबकि दूसरों का तर्क है कि हाल की adoption “dying” narrative का खंडन करती है।