Zig प्रोग्रामिंग भाषा को अनोखा क्या बनाता है?
(erikexplores.substack.com)- विशेषज्ञों ने इशारा किया था कि "ऐसा कोड जिसे compile time पर चलाया जा सके" एक "बेवकूफ़ाना आइडिया" है,
लेकिन Zig के निर्माता Andrew Kelley आगे बढ़ते रहे और इसे implement किया - कुछ साल बाद यह Zig की killer features में से एक बन गया
- Zig में
comptimeउस कोड को कहा जाता है जिसे compile time पर चलना होता है- Zig डेवलपर्स compile के दौरान executable Zig code का उपयोग करके generics/templates के लिए अलग support के बिना भी generic code लिख सकते हैं और metaprogramming कर सकते हैं
2 टिप्पणियां
पहले ही पैराग्राफ़ से समस्या दिखती है... programming languages की दुनिया में compile-time computation को आम तौर पर multi-stage programming कहा जाता है, और यह meta programming को लागू करने के तरीकों में से एक है। यह बिल्कुल भी कोई बेवकूफ़ी भरा विचार नहीं है।
C++ जैसी भाषाएँ, जिनमें multi-stage programming किसी तरह "हो ही गया", उनमें हर stage (इस मामले में compile time और runtime) पर code के बहुत अलग हो जाने की समस्या होती है (अब C++ में
constexprहै, लेकिन फिर भी कई तरह से कमी रहती है)। दूसरी ओर, Zig को शुरू से multi-stage programming को ध्यान में रखकर design किया गया था, इसलिए इसमें compile time और runtime पर लगभग एक जैसा code लिखा जा सकता है। इसके साथ ही इसकी एक कमी यह भी है कि compile time पर पहले से अनुमान लगाया जा सकने वाली चीज़ें बहुत कम हैं।तो... शायद इसे ऐसे समझा जा सकता है कि अपरिहार्य
unittestको पहले compile time पर चलाकर,जो चीज़ें runtime error बन सकती हैं उन्हें compile error तक खींच लाया जाता है...
दस्तावेज़ों और Q&A को मोटे तौर पर देखने पर, यह भी काफ़ी आकर्षक लगता है कि यह drop-in के रूप में C को replace कर सकता है। Rust से अलग इसका syntax सरल होना भी अच्छा है। बेशक, यह Rust जितना सुरक्षित नहीं होगा... लेकिन Rust इस्तेमाल करते समय जो overengineering वाला एहसास आता है, वह शायद थोड़ा कम लगे। Go का भी तुलना के रूप में ज़िक्र होता है, और जिन परिस्थितियों में runtime न होना ज़्यादा मायने रखता है, वहाँ Zig कम बोझिल लग सकता है। खासकर अगर और low-level पर जाना हो, या बहुत सारे requests संभालने की ज़रूरत न हो, तो Go की तुलना में यह ज़्यादा हाथ जाने वाला विकल्प हो सकता है...
इसलिए लगता है कि अगर यह Rust और Go के बीच अपनी positioning अच्छी तरह बना ले, तो उम्मीद से बेहतर एक अच्छा विकल्प बन सकता है.