इस प्रोजेक्ट के बारे में

Wago पूरी तरह से Go में लिखा गया एक WebAssembly रनटाइम है। Wasm की व्याख्या (interpret) करने के बजाय, यह मॉड्यूल को सीधे नेटिव मशीन कोड में कंपाइल करता है, जिससे इसे CGO के बिना Go प्रोग्राम्स में एम्बेड किया जा सकता है, जिससे साधारण Go बिल्ड्स और क्रॉस-कंपाइलेशन सरल रहता है। यह प्रोजेक्ट खुद को तेज़, कॉम्पैक्ट और विस्तार योग्य बताता है, और यह स्पष्ट करता है कि यह अभी बीटा में है, जिसका अर्थ है कि APIs और जनरेट किए गए .wago आर्टिफैक्ट्स बदल सकते हैं। प्रोजेक्ट द्वारा हाईलाइट की गई विशेषताएं: - शुद्ध Go: एम्बेडिंग के लिए C टूलचेन की आवश्यकता नहीं है। - मानकों पर केंद्रित: कहा गया है कि रनटाइम आधिकारिक WebAssembly टेस्ट सूट, साथ ही फज़िंग और रियल-वर्ल्ड कॉर्पोरा को पास करता है। - विस्तार योग्य: WASI, Component Model और अन्य होस्ट क्षमताएं कोर रनटाइम के बाहर प्लगइन्स के रूप में रहती हैं। - स्टैंडअलोन एक्जीक्यूटेबल्स: एक .wasm फ़ाइल को एक छोटे नेटिव बाइनरी में कंपाइल किया जा सकता है, जो README के अनुसार CLI टूल्स के लिए उपयोगी है। - प्लेटफॉर्म: amd64 और arm64 पर Linux, macOS और Windows, जिसमें बैकएंड के आधार पर WebAssembly फीचर कवरेज अलग-अलग होता है। एक फीचर मैट्रिक्स फ़ाइल सटीक कवरेज का दस्तावेजीकरण करती है। इंस्टॉलेशन macOS और Linux पर दस्तावेज़ में दिया गया वन-लाइनर एक इंस्टॉलर स्क्रिप्ट डाउनलोड करता है और उसे sh में पाइप करता है; Windows पर, PowerShell उपयोगकर्ता समकक्ष irm कमांड चलाते हैं। ये एक मैनेजर इंस्टॉल करते हैं, जो फिर एक रनटाइम इंस्टॉल करता है। डॉक्यूमेंटेशन साइट वैकल्पिक इंस्टॉलेशन विधियों, रिलीज़ चैनलों और सोर्स बिल्ड्स को कवर करती है। मॉड्यूल चलाना इंस्टॉलेशन के बाद एक मॉड्यूल को सीधे निष्पादित किया जा सकता है: एक छोटे Fibonacci Wasm फ़ाइल को तर्क (argument) के साथ चलाने पर अपेक्षित परिणाम प्रिंट होता है। स्टैंडअलोन बाइनरी बनाने के लिए, compile सबकमांड एक .wasm इनपुट और एक आउटपुट पाथ लेता है, और परिणामी एक्जीक्यूटेबल समान तर्क स्वीकार करता है। Go से Wago का उपयोग करना Go डेवलपर्स go get github.com/wago-org/wago के साथ मॉड्यूल जोड़ते हैं। रिपॉजिटरी में नंबर वाले उदाहरण दिए गए हैं, जिसमें एक टाइप्ड रनटाइम उदाहरण शामिल है जो एक मॉड्यूल को कंपाइल करता है, एक इंस्टेंस बनाता है और एक एक्सपोर्टेड फंक्शन को कॉल करता है। एक अलग डॉक्यूमेंटेशन गाइड Go में Wago को एम्बेड करने की प्रक्रिया बताती है। होस्ट क्षमताएं और प्लगइन्स होस्ट इंटीग्रेशन को जानबूझकर कोर रनटाइम से बाहर रखा गया है। एक प्रोजेक्ट को init कमांड के साथ शुरू किया जा सकता है, और WASI कार्यान्वयन जैसे प्लगइन्स नाम से जोड़े जाते हैं, उदाहरण के लिए wago-org/wasi। उपलब्ध प्लगइन्स को ब्राउज़ करने के लिए एक प्लगइन रजिस्ट्री साइट प्रदान की गई है। परफॉरमेंस README बताता है कि Wago कुछ किलोबाइट RAM का उपयोग करता है और दावा करता है कि इसका कंपाइल समय wazero की तुलना में लगभग तीन गुना तेज़ और निष्पादन लगभग 40 प्रतिशत तेज़ है। प्रोजेक्ट बेंचमार्क पेज और रिपॉजिटरी में एक बेंचमार्क डायरेक्टरी का लिंक देता है। ये आंकड़े मेंटेनर्स के अपने माप हैं और उन पर भरोसा करने से पहले उन्हें अपने वर्कलोड के साथ जांचा जाना चाहिए। प्रोजेक्ट स्टेटस और लाइसेंसिंग Wago को Apache License 2.0 के तहत रिलीज़ किया गया है और इसे निःशुल्क विकसित किया गया है, जिसमें प्रायोजन (sponsorship) को प्रोत्साहित किया गया है। रिपॉजिटरी में डॉक्यूमेंटेशन, उदाहरण, एक फीचर मैट्रिक्स, एक आर्किटेक्चर दस्तावेज़, एक रोडमैप, योगदान दिशानिर्देश और एक इश्यू ट्रैकर शामिल है। कुल मिलाकर, Wago उन Go डेवलपर्स को लक्षित करता है जो C डिपेंडेंसी के बिना WebAssembly चलाना या एम्बेड करना चाहते हैं, और जो एक छोटे रनटाइम कोर को प्राथमिकता देते हैं जिसकी होस्ट विशेषताएं प्लगइन्स के माध्यम से जोड़ी जाती हैं। इसकी बीटा स्थिति और यह तथ्य कि बेंचमार्क नंबर प्रोजेक्ट से ही आए हैं, इसे अपनाने से पहले विचार करने योग्य मुख्य बिंदु हैं।