24 पॉइंट द्वारा GN⁺ 2026-01-11 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • WebAssembly(Wasm) अब भी कई वास्तविक प्रोडक्ट्स में एक core technology के रूप में इस्तेमाल हो रहा है, और game engine·design tool·web container आदि में महत्वपूर्ण भूमिका निभाता है
  • यह भाषा स्वयं hardware पर efficiently map होने वाली संरचना रखती है, और security व portability को केंद्र में रखकर डिज़ाइन की गई है
  • इसका security model ‘deny-by-default’ संरचना पर आधारित है, जो process-level isolation और तेज execution speed को संभव बनाता है
  • plugin ecosystem और cross-language support के जरिए इसका उपयोग कई तरह के environments में होता है, लेकिन पूरे browser को replace कर देने वाले स्तर की adoption अभी नहीं हुई है
  • वर्तमान में WebAssembly library और runtime स्तर पर गहराई से integrated है, और standardization व feature expansion तेजी से आगे बढ़ रहे हैं

वास्तविक उपयोग के उदाहरण

  • WebAssembly Godot, Figma, Stackblitz, Squoosh.app, Zellij, Ruffle आदि में core functionality संभालता है
    • Godot इसे web के लिए game build में, और Figma C++ code को browser में चलने योग्य रूप में बदलने के लिए उपयोग करता है
    • Stackblitz web container के लिए, और Ruffle Flash emulator के रूप में Wasm का उपयोग करता है
  • लेकिन पूरे web को Wasm-आधारित बनाकर तैयार की गई बड़ी साइटें बहुत कम हैं, ज़्यादातर मामलों में इसका उपयोग specific features के स्तर पर होता है

WebAssembly की परिभाषा और गति

  • WebAssembly एक language है, इसलिए इसकी अपनी अलग speed की धारणा नहीं है; यह engine performance पर निर्भर करती है
  • JavaScript की तरह runtime engine (V8, SpiderMonkey आदि) ही execution speed तय करते हैं
  • WebAssembly की संरचना modern hardware पर efficiently map होने के लिए बनी है, और इसे compile या interpret दोनों तरीकों से चलाया जा सकता है

कुशल मैपिंग संरचना

  • Wasm assembly language के करीब bytecode है, जिसे ज़्यादातर hardware पर बिना नुकसान compile किया जा सकता है
  • WAT(WebAssembly Text), Wasm का text representation है, और लगभग 1:1 conversion संभव है
  • यह JVM bytecode जैसा है, लेकिन API छोटा है और security guarantees अधिक मज़बूत हैं
    • memory access explicit होता है, और host environment में केवल वही resources उपयोग किए जा सकते हैं जिनकी अनुमति दी गई हो

compile target के रूप में Wasm

  • Rust, C, Zig, Go, Kotlin, Java, C# जैसी कई भाषाएँ Wasm में compile हो सकती हैं
  • Python, PHP, Ruby जैसी interpreted languages भी Wasm build के रूप में चलाई जा सकती हैं
  • browser में मूल रूप से Wasm engine शामिल होता है, और Wasmtime, WasmEdge, Wasmer जैसे स्वतंत्र runtimes भी मौजूद हैं
  • एक single Wasm artifact को hardware-independent execution के साथ चलाया जा सकता है

सुरक्षा संरचना और उपयोग

  • WebAssembly ‘deny-by-default’ security model अपनाता है, जिसमें बाहरी access केवल explicit import के जरिए ही अनुमति पाता है
  • hidden control-flow stack, linear memory, और restricted instruction set के माध्यम से मज़बूत isolation सुनिश्चित किया जाता है
  • Cloudflare V8 isolate का उपयोग करके Wasm-आधारित code execution को isolate करता है, और Fermyon sub-millisecond स्तर की startup speed प्रदान करता है
  • Ruffle Flash content को सुरक्षित तरीके से पुनर्स्थापित करता है, Pyodide Python को Wasm पर चलाता है, और Figma Wasm-आधारित QuickJS से plugins चलाता है

portability और embedding

  • Wasm runtime हल्का होता है, और Zellij, Envoy, Lapce आदि ने अपने plugin system में Wasm अपनाया है
  • JavaScript engine वाले environments में भी image processing, OCR, physics engine, rendering, media toolkit, database, parser जैसी कई Wasm libraries का उपयोग किया जा सकता है
  • अधिकांश मामलों में users को यह पता भी नहीं चलता कि Wasm उपयोग हो रहा है, क्योंकि यह library के अंदर पारदर्शी रूप से काम करता है

speed और size की दोबारा समीक्षा

  • browser, JS के समान pipeline पर Wasm चलाता है, इसलिए engine architecture के कारण performance limits मौजूद हैं
  • language type system और compiler optimization level के अनुसार efficiency में अंतर आता है
  • host-program boundary cost और binary size बढ़ना इसकी कमियों के रूप में बताए जाते हैं
    • WASI standard इन समस्याओं को कम करने की कोशिश करता है, लेकिन string type standardization अभी अधूरी है
  • Zig सबसे छोटे Wasm binaries बनाता है
  • native environments में threading·IO·memory usage के कारण performance कम हो सकती है

भाषा और मानकीकरण विकास रुझान

  • Wasm standardization W3C Working Group और Bytecode Alliance के माध्यम से समानांतर रूप से आगे बढ़ रही है
    • दूसरा समूह WIT, Component Model जैसे tool-केंद्रित विकास का नेतृत्व कर रहा है
  • नई feature proposals तेज़ी से अपनाई जा रही हैं, हालांकि कुछ जगहों पर इसकी गति और दिशा को लेकर बहस भी है
  • Wasm JavaScript के replacement से अधिक, एक internal integration technology के रूप में फैल रहा है
    • Blazor, Leptos जैसे frameworks सीधे JS को संभाले बिना Wasm का उपयोग करते हैं
  • अभी Wasm को मुख्यतः library creators अपना रहे हैं, और सामान्य developers इसके अंदरूनी काम को समझे बिना भी इसका उपयोग कर सकते हैं
  • शैक्षिक सामग्री की जटिलता को learning barrier माना जाता है, और ‘watlings’ जैसे learning projects का परिचय दिया जाता है

1 टिप्पणियां

 
GN⁺ 2026-01-11
Hacker News की राय
  • मेरा मानना है कि Wasm ने अपने निर्माण के समय तय किए गए अधिकांश लक्ष्यों को हासिल कर लिया है
    मैंने व्यक्तिगत रूप से दर्जनों प्रोजेक्ट्स में Wasm को एक मुख्य घटक के रूप में इस्तेमाल किया है
    JS engines बहुत तेज़ हैं, लेकिन Wasm अब भी CPU नियंत्रण के मामले में ऊँचे स्तर का है और performance शानदार देता है
    लेकिन यह JS+HTML+CSS को पूरी तरह replace कर देगा, इस उम्मीद तक यह नहीं पहुँच पाया। मेरे हिसाब से इसकी बड़ी वजह DOM binding की कमी है
    मैंने Yew जैसे Wasm frameworks भी इस्तेमाल किए हैं, लेकिन वे JS के ऊपर चढ़ी हुई एक अटपटी layer जैसे लगे
    मैंने अभी तक Blazor इस्तेमाल नहीं किया है, लेकिन मुझे अब भी JS में लिखना ज़्यादा सहज लगता है
    फिर भी Wasm चुपचाप बहुत-सी जगहों पर चल रहा है, और मुझे लगता है कि यही उसकी असली सफलता का सबूत है

    • ऐसा लगता है कि लेख ने Wasm को किसी app framework की तरह आँका है, लेकिन असल में Wasm CPU optimization और native code reuse के लिए बनी तकनीक है
      उदाहरण के लिए ब्राउज़र में audio speed adjustment जैसे फीचर के लिए C++ library को Wasm में चलाना ही उस स्तर की performance देता है
    • समस्या कोई “मूल रूप से अलग वजह” नहीं है, बल्कि साफ़ तौर पर DOM access performance की कमी है
      अगर सही DOM bindings मिल जाएँ, तो 10 साल के भीतर JS frontend से बाहर हो जाएगा
    • Blazor WASM अभी संभव Wasm उपयोगों में सबसे परिपक्व approaches में से एक है
      C# में backend और frontend code share करना आसान है, और Razor templates के लिए IDE support भी अच्छा है
      लेकिन .NET CLR और BCL को पूरा साथ ले जाना पड़ता है, इसलिए bundle size बड़ा हो जाता है
      DOM access मुश्किल होने की वजह से Blazor की संरचना JS side पर एक छोटे Virtual DOM renderer को रखती है
      Performance ठीक है, लेकिन हाथ से लिखे JS से अब भी धीमी है
      F# आधारित Bolero भी दिलचस्प है, लेकिन टीम को मनाना मुश्किल है
    • मुझे शुरू से ही लगा कि पूरे webapp को Wasm से बनाना अव्यावहारिक है
      DOM के साथ interact करने के लिए उसके अनुरूप high-level language चाहिए
      JS यह भूमिका अच्छी तरह निभाता है, और HTML/CSS/JS का संयोजन पहले ही UI development की साझा भाषा बन चुका है
      Browser rendering को छोड़कर canvas-आधारित दिशा में जाने की कोशिशें भी हैं, लेकिन वे अब भी niche हैं
    • JS को पूरी तरह replace न कर पाना शायद अच्छी बात है
      एक साधारण website के लिए भी कई MB का runtime डाउनलोड करना पड़े, ऐसी दुनिया डरावनी होगी
      असली सुस्ती की वजह JS नहीं बल्कि DOM है। आखिरकार interact तो DOM से ही करना पड़ता है
  • मैंने कई साल WebAssembly पर काम किया है, और जल्द ही Wasm-आधारित framework जारी करने वाला हूँ
    Ecosystem तेज़ी से आगे बढ़ रहा था, फिर अचानक धीमा पड़ गया, और WASI तथा Component Model के आने से काफ़ी उलझन पैदा हुई
    हर engine में support का स्तर अलग है, इसलिए documentation, code और issues के बीच भटकना पड़ता है
    सबसे बड़ी समस्या JS/TS support है। फिलहाल यह लगभग hacking जैसे integration तरीके पर टिका है, इसलिए स्थिर नहीं है
    Web Containers ने कुछ सुधार लाए, लेकिन तब तक कई developers Bun की ओर जा चुके थे

    • एक सवाल आया कि JS/TS support से आपका मतलब具体 तौर पर क्या है
  • Wasm की potential बहुत बड़ी है
    सिद्धांत रूप में यह हर platform के लिए एक साझा compilation target बन सकता है
    लेकिन हक़ीक़त में इसका उपयोग Figma की कुछ features को तेज़ बनाने तक सीमित दिखता है, जो थोड़ा निराशाजनक है
    Committee-केंद्रित development structure की वजह से इसकी रफ़्तार धीमी होना भी एक सीमा है

    • अब सिर्फ potential की बात नहीं, results दिखाने का समय है
      Native Client के दौर में native-speed apps संभव थे, लेकिन आज का Wasm उससे धीमा है
      JS binding structure को Wasm पर भी लागू किया जा सकता था, यह कमी खलती है
      ऊपर से Wasm, JS से तेज़ भी नहीं है
    • सिर्फ “सिद्धांत रूप में संभव” होने से लोग Wasm नहीं अपनाएँगे
      HTML/CSS/JS ने अपनी उपयोगिता पहले ही साबित कर दी है, जबकि Wasm अब भी एक अपरिचित tech stack है
    • मेरा मानना है कि containers को WASI से replace कर देना चाहिए
      Docker-केंद्रित ecosystem ही रुकावट बन रहा है
    • The Birth and Death of JavaScript वीडियो की सिफारिश की गई
  • JS ecosystem के बहुत-से build tools Rust में लिखे गए हैं, और उनमें से कुछ browser में Wasm के रूप में चलते हैं
    React और npm ecosystem भी अंदरूनी तौर पर Wasm का इस्तेमाल करते हैं
    अगर Wasm गायब हो जाए, तो JS frontend की दुनिया बुरी तरह हिल जाएगी
    लेकिन native Wasm UI frameworks अब भी कमज़ोर हैं
    DOM और CSS पर निर्भर रहना पड़ता है, और browser APIs तक पहुँचने के लिए JS के ज़रिए जाना पड़ता है, इसलिए यह अक्षम है
    Rust या Kotlin से DOM नियंत्रित किया जा सकता है, लेकिन Rust frontend के लिए बहुत low-level है
    mobile cross-compilation बढ़ता जा रहा है, और JetBrains Compose Multiplatform उसका एक उदाहरण है

    • इस दावे का खंडन भी हुआ कि React बहुत-से Wasm components इस्तेमाल करता है
  • Wasm की प्रगति को रोकने वाली सबसे बड़ी चीज़ tooling है
    Debugging अभी भी printf स्तर पर है, और Chrome का DWARF plugin भी काफ़ी समय से update नहीं हुआ
    अलग-अलग भाषाओं में .wasm files बनाना और import/export सेट करना जटिल है
    GC support भी पूरा नहीं है, इसलिए .NET जैसे ecosystems को अपना GC साथ लाना पड़ता है
    WIT एक और COM/CORBA/gRPC जैसी कोशिश लगती है

    • 10 साल बाद भी tooling अधूरी है
      Emscripten जटिल और अस्थिर है, wasi-sdk में features की कमी है
      LLVM और engines दोनों में optimization कमज़ोर है, और Rust की Wasm tooling भी लगभग रुकी हुई है
      JS में Wasm modules को standard तरीके से import करने का तरीका तक मौजूद नहीं है
      Multithreading support के लिए COOP/COEP headers चाहिए, इसलिए GitHub Pages पर यह संभव नहीं है
      अगर tooling “tech demo” स्तर से आगे बढ़ी होती, तो इसका उपयोग कहीं ज़्यादा होता
    • यह राय भी आई कि “WASM Components Model” शायद इन समस्याओं को हल कर सके
  • हमारी कंपनी Leaning Technologies Wasm का सक्रिय रूप से इस्तेमाल करती है
    WebVM से browser में x86 binaries चलाए जाते हैं,
    BrowserCraft से Java apps (Minecraft सहित) चलाए जाते हैं,
    और BrowserPod से browser में Node.js containers चलाए जाते हैं
    यह बेहद शक्तिशाली है, लेकिन power users के लिए tool है। सामान्य frontend logic को Wasm में compile करना अक्षम है

    • एक feedback था कि Firefox में BrowserCraft नहीं चला, लेकिन Brave में ठीक चला
      CheerpJ की प्रगति की रफ़्तार प्रभावशाली है, और कुछ लोगों का मानना था कि अगर यह 10 साल पहले आ गया होता तो web platform अलग होता
    • इसका विरोध भी हुआ कि “frontend logic को Wasm में compile क्यों नहीं करना चाहिए”
      JS को नापसंद करने वालों के लिए JS-रहित website बनाना ही Wasm का असली आकर्षण है
  • मैं Rust-आधारित Wasm framework Dioxus पर काम करता हूँ
    Frontend Wasm में bundle splitting, hot reload, debugging symbols, asset integration जैसी बुनियादी tooling की कमी समस्या रही है
    2025 में इसमें काफ़ी सुधार हुआ है, और Vite जैसे tools के साथ integration भी बेहतर हुआ है
    AI tools की वजह से Rust development की गति भी बढ़ी है, और आगे Wasm frameworks पर ज़्यादा ध्यान जाएगा, ऐसी उम्मीद है

  • Wasm के binary size पर भी सवाल उठे
    DSL environment में download होने में कई सेकंड से लेकर कई मिनट तक लग सकते हैं
    यह तर्क दिया गया कि JS छोटा होता है और download के दौरान भी चल सकता है

    • असल में Wasm कई बार JS से छोटा होता है
      Rust से build करने पर इसे 10~100KB तक लाया जा सकता है
      JS download के दौरान execute नहीं होता, जबकि Wasm streaming compilation से और तेज़ शुरू हो सकता है
    • Godot जैसे games में runtime के अलावा बड़े assets भी डाउनलोड करने पड़ते हैं, इसलिए user experience ख़राब होता है
      यह browser द्वारा पहले से दी गई सुविधाओं को फिर से लागू करने जैसा है
    • Wasm की अक्षमता format की वजह से नहीं, बल्कि language runtime के भारीपन की वजह से है
      उदाहरण के लिए FSHistory 24KB में x86 emulation लागू करता है
    • Wasm format मूल रूप से size optimization को ध्यान में रखकर डिज़ाइन किया गया था
      लेकिन native ecosystem code size optimization का आदी नहीं है
    • अगर GC languages को WasmGC में compile किया जाए, तो उनके JS से बड़े होने की लगभग कोई वजह नहीं है
  • लेख में कहा गया कि “Wasm से बने बड़े websites नहीं हैं”, लेकिन मेरा अनुभव इससे अलग है
    Wasm projects का लक्ष्य पूरे webapp को replace करना कभी था ही नहीं
    लगता है लोगों ने ग़लत अपेक्षाएँ बना लीं और फिर पूछा, “यह वैसा क्यों नहीं हुआ?”

  • मैंने वास्तव में Wasm को कई व्यावहारिक use cases में लागू किया है

    • codec support: browser में supported न होने वाले video और audio codecs को Wasm में लागू किया
    • code sharing: C में लिखी गई business logic को frontend और backend दोनों में एक जैसा इस्तेमाल किया
    • obfuscation: JS की core logic को Rust+Wasm में ले जाकर performance और security दोनों हासिल किए
    • यह राय भी आई कि अगर JS छिपाना है, तो उसे browser तक भेजना ही नहीं चाहिए
      Backend में ज़रूरी हिस्से काटकर भेजने के तरीके से यह किया जा सकता है
    • एक टिप्पणी में पूछा गया कि क्या कोई open source codec मौजूद है। इससे browser-आधारित VLC जैसे project की कल्पना जुड़ी