WebAssembly क्या है?
- WebAssembly एक standardized instruction set और bytecode format है, जिसे web browser में untrusted client-side code को लगभग native speed पर चलाने के लिए डिज़ाइन किया गया है।
- यह Emscripten के C/C++ से JavaScript compiler से विकसित हुआ, और शुरुआती दौर में LLVM IR को JavaScript में बदलकर web पर C और C++ code चलाने की सुविधा देता था।
- समय के साथ browser developers ने Emscripten project के साथ मिलकर performance optimization के लिए JavaScript का एक सरल subset बनाया, जिसे asm.js के रूप में standardize किया गया।
- बाद में JavaScript के overhead से बचने के लिए एक स्वतंत्र bytecode format डिज़ाइन किया गया, और वही Wasm है।
- हाल के समय में WebAssembly browser के बाहर भी लोकप्रिय हो रहा है, और Fastly तथा Shopify ने WebAssembly engine पर आधारित Edge Compute और Functions products बनाए हैं।
- WebAssembly विभिन्न source languages से target किए जाने की क्षमता के कारण plugin ecosystem बनाने के लिए एक आकर्षक platform है।
WebAssembly interpreter क्यों?
- कई software engineers की तरह, मैं भी नए side project शुरू करने और कुछ हफ्तों बाद उनमें रुचि खो देने के पैटर्न में फँसा हुआ था।
- मुझे एक बड़े project की ज़रूरत थी जिसमें मैं लगातार समय तक मेहनत लगा सकूँ, और जो मुझे computing stack के निचले स्तरों से परिचित कराए।
- WebAssembly के hype में मेरी दिलचस्पी बढ़ी, और यह custom system calls डिज़ाइन करने वाले platform engineering tool के रूप में आकर्षक लगा।
Semblance
- WebAssembly Core Specification से परिचित होने के लिए मैंने एक WebAssembly interpreter लिखने का फैसला किया।
- चूँकि project का लक्ष्य सीखना था, इसलिए मेरा इरादा सभी opcode implement करने या core test suite pass करने का नहीं था।
- अगर यह
"Hello, World!" चला सके, तो मैं संतुष्ट होता।
परिणाम
- इस project को बड़ी सफलता माना जा सकता है। opcode coverage पूरी नहीं है, लेकिन यह एक साधारण
"Hello, World!" program चला सकता है।
- code बिखरा हुआ है, धीमा है, memory leak है, और यह malicious modules के प्रति कमजोर हो सकता है, लेकिन यह काम करता है।
- मैंने WebAssembly की core specification के बारे में बहुत कुछ सीखा, और एक engineer के रूप में अपने comfort zone से बाहर निकल सका।
- अब मुझे लगता है कि मैंने WebAssembly के बारे में इतना ज्ञान हासिल कर लिया है कि Wasmtime जैसे industrial runtime में योगदान दे सकूँ।
1 टिप्पणियां
Hacker News की राय
मैंने Scheme में एक Wasm इंटरप्रेटर लिखा था, इसलिए दूसरों को इसे खुद बनाते देखना खुशी की बात है। Wasm सोच से कम कठिन है, और मैं सलाह दूँगा कि हर instruction को implement करने की कोशिश किए बिना, जितना मज़ा आए उतना ही आज़माएँ
शुरुआती सवाल:
हाथ से WASM interpretation पर एक दिलचस्प लेख मिला
यह एक दिलचस्प approach है, और शानदार काम है
मुझे लगता है कि Wasm-C-API को standard interface के रूप में अपनाना एक अच्छा विचार होता
एक विवादास्पद बिंदु:
Orca को देखने की सलाह दूँगा। योगदान करने का यह अच्छा अवसर हो सकता है: https://orca-app.dev
WebAssembly को गहराई से समझते हुए और शुरू से इंटरप्रेटर बनाते हुए देखना वाकई बहुत शानदार है
शानदार लेख है, और इससे WASM implementation पर वापस जाने की प्रेरणा मिलती है
यह सचमुच बहुत शानदार काम है