2 पॉइंट द्वारा GN⁺ 2025-02-05 | 1 टिप्पणियां | WhatsApp पर शेयर करें

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 टिप्पणियां

 
GN⁺ 2025-02-05
Hacker News की राय
  • मैंने Scheme में एक Wasm इंटरप्रेटर लिखा था, इसलिए दूसरों को इसे खुद बनाते देखना खुशी की बात है। Wasm सोच से कम कठिन है, और मैं सलाह दूँगा कि हर instruction को implement करने की कोशिश किए बिना, जितना मज़ा आए उतना ही आज़माएँ

    • लेखक के लिए एक टिप: spec-test में जटिल रूप वाले text wasm शामिल होते हैं, लेकिन wast2json converter का उपयोग करने पर अधिक सरल JSON विवरण और सामान्य binary wasm फ़ाइलें मिल सकती हैं
  • शुरुआती सवाल:

    • अगर इंटरप्रेटर को खुद कोड नहीं कर रहे हों, तो debugging कैसे की जाती है, यह जानने की जिज्ञासा है
    • string opcode की fuzzing कितनी प्रभावी होती है, यह जानने की जिज्ञासा है
    • server-side WASM engine और browser-आधारित engine के बीच व्यावहारिक अंतर वास्तव में कितना है, और एक को दूसरे में बदलने के लिए कितना काम चाहिए, यह जानने की जिज्ञासा है
  • हाथ से WASM interpretation पर एक दिलचस्प लेख मिला

    • इसी के आधार पर https://github.com/peterseymour/winter बनाया, और सीखा कि WASM उतना सरल नहीं है जितना पहले लगा था
  • यह एक दिलचस्प approach है, और शानदार काम है

  • मुझे लगता है कि Wasm-C-API को standard interface के रूप में अपनाना एक अच्छा विचार होता

    • यह वह API है जिसे ज़्यादातर Wasm runtime (Wasmmer, V8, wasmi आदि) अपनाते हैं, और क्योंकि यह C में लिखा गया है, इस API से परिचित डेवलपर्स इसे आसानी से आज़मा सकते हैं
    • अगर लेखक Wasm से परिचित हैं, तो Wasmer में patch या improvements योगदान करना भी स्वागतयोग्य होगा
  • एक विवादास्पद बिंदु:

    • जानना चाहूँगा कि क्या शुरुआती tail call instructions जोड़ने में रुचि है
    • WASM spec के जिम्मेदार लोगों ने इसे "high-level" कहकर ठुकरा दिया, लेकिन C committee ने भी Dennis Ritchie के प्रस्ताव को ठुकराया था। Rob Pike भी Ritchie की दिशा का समर्थन करते दिखते हैं। अगर ऐसा नहीं है, तो फिर Golang क्यों बनाया? tail call तभी high-level लगता है जब call खुद high-level हो
  • Orca को देखने की सलाह दूँगा। योगदान करने का यह अच्छा अवसर हो सकता है: https://orca-app.dev

  • WebAssembly को गहराई से समझते हुए और शुरू से इंटरप्रेटर बनाते हुए देखना वाकई बहुत शानदार है

  • शानदार लेख है, और इससे WASM implementation पर वापस जाने की प्रेरणा मिलती है

  • यह सचमुच बहुत शानदार काम है