11 पॉइंट द्वारा GN⁺ 2025-05-10 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • Wasm 2.0 स्पेक आधिकारिक रूप से घोषित किया गया
  • Wasm Community और Working Groups ने 2022 से स्पेक को पूरा किया, और प्रमुख implementations पहले से ही 2.0 को support कर रहे थे
  • 2.0 से evergreen model पेश किया गया है, जिसके तहत Candidate Recommendation दस्तावेज़ लगातार नवीनतम स्थिति में अपडेट होते रहते हैं
  • हर नए version की घोषणा पर उसे final recommendation में ले जाने के बजाय, मौजूदा recommendation draft को ही standard माना जाता है

Wasm 2.0 की प्रमुख विशेषताएँ और अतिरिक्त बदलाव

  • vector instructions (SIMD): 236 नए instructions जोड़े गए हैं, जिससे आधुनिक CPU की 128-bit SIMD क्षमताओं का उपयोग संभव होता है; यह high-performance audio/video codecs, machine learning, encryption आदि के लिए प्रभावी है
  • bulk memory instructions: memory और table की तेज़ copy और initialization के लिए instruction set जोड़ा गया है
  • multi-value return: functions और blocks से कई values लौटाई जा सकती हैं, जिससे calling conventions बेहतर होते हैं और अतिरिक्त program transformations संभव होते हैं
  • reference types: functions के references या external objects (जैसे JavaScript values) pointers को opaque first-class values के रूप में support किया गया है; tables को इन reference values के storage के रूप में उपयोग किया जा सकता है, और tables को संभालने वाले instructions तथा multiple table definitions संभव हो गए हैं
  • non-trapping conversions: floating-point से integer में conversion के दौरान अप्रत्याशित trap न हो, इसके लिए conversion instructions पेश किए गए हैं
  • sign-extension instructions: signed integers की width को सीधे बढ़ाने वाले instructions जोड़े गए हैं, जिससे पहले की तुलना में memory access के बिना extension संभव हो गया है

backward compatibility और आगे की दिशा

  • Wasm 2.0 1.0 के साथ पूरी तरह compatible है, इसलिए मौजूदा programs बिना बदलाव के चलते हैं
  • Wasm 3.0 का रिलीज़ भी जल्द अपेक्षित है

2 टिप्पणियां

 
caniel 2025-05-10

WA!(SM)

 
GN⁺ 2025-05-10
Hacker News राय
  • मार्च 2025 में WASM 2.0 की घोषणा की खबर का सार यह है कि 128-bit SIMD समेत 236 नए vector instructions के जरिए video/audio codecs, machine learning और cryptography applications की performance काफ़ी बढ़ाई गई है, bulk memory instructions से तेज़ memory copy/initialization का support मिला है, functions अब multiple results return कर सकते हैं जिससे तेज़ calling conventions और indirect references में कमी संभव हुई है, reference types के जरिए बाहरी objects (जैसे JavaScript values) के pointers को first-class values की तरह treat किया जा सकता है, कई प्रकार की tables declare की जा सकती हैं, और bit-width extension instructions तथा unexpected traps के बिना floating-point conversions जैसी चीज़ों के साथ यह एक बड़ा upgrade है
    • Rust+LLVM अभी ABI compatibility समस्याओं के कारण multiple return values support का व्यावहारिक उपयोग नहीं कर पा रहे हैं, Clang की स्थिति का मुझे ठीक पता नहीं है
    • vector instructions (SIMD) वाला हिस्सा शायद बहुत जल्दी optimization के पीछे भागने की वजह से ज़रूरत से ज़्यादा complex हो गया है, बस flexible-size vectors proposal इस्तेमाल किया जाता तो ज़्यादा elegant होता
    • multiple return values feature Common Lisp runtime development के लिए भी बहुत फ़ायदेमंद होगा
    • official post के अंत में लिखा है “जल्द ही Wasm 3.0 का परिचय देंगे”, इसलिए लगता है कि Wasm 3.0 सचमुच ज़्यादा दूर नहीं है
    • architecture-independent और general-purpose ISA, और किसी specific CPU SIMD का अधिकतम लाभ लेने वाला ISA — दोनों साथ नहीं चल सकते, एक चुनना ही पड़ेगा; GitHub के rate limit की वजह से मैं यह जाँच नहीं कर पाया कि मौजूदा Wasm2 SIMD instructions काफ़ी general-purpose हैं या नहीं
  • WebAssembly specification पढ़ने में काफ़ी आसान है, लेकिन जो beginners पूरी spec नहीं पढ़ना चाहते उनके लिए WebAssembly from the Ground Up नाम की online book की सिफारिश है; इसमें JavaScript से compiler बनाते हुए step-by-step सीखने का ढाँचा है, जो hands-on practice के लिए अच्छा है; इसका एक free sample भी है, और संदर्भ के लिए बता दूँ कि मैं उसके लेखकों में से एक हूँ
    • मुझे व्यक्तिगत रूप से Ada इसलिए पसंद है क्योंकि JavaScript की तरह झंझट वाले U32 check function code के बजाय Ada में subtype या modules के ज़रिए इसे बहुत साफ़ तरीके से संभाला जा सकता है
    • मुझे जिज्ञासा है कि क्या WASM code को instrument करके in-process debugging संभव है; यानी किसी custom language को real time में WASM में बदलकर, web पर breakpoints और memory inspection तक एक साथ implement किया जा सकता है या नहीं
  • पिछले 1 साल में WebAssembly runtime development पर काम करते हुए मैं specification की सख़्ती और अच्छी तरह उपलब्ध tests से प्रभावित हुआ हूँ; familiar होने में थोड़ा समय लगता है, लेकिन एक बार समझ में आ जाए तो यह बहुत smart language spec है; ambiguous situations में spec से सीधे generate किया गया reference interpreter बहुत मददगार होता है, और consistency verification के लिए spec tests भी काफ़ी उपयोगी हैं
  • हाल में Wasm Constant Time proposal को inactive में शिफ्ट कर दिया गया; असल काम का ज़्यादातर हिस्सा 2018 में हुआ था, लेकिन SIMD integration और official extension integration टलते रहे; जब तक कोई इस बेहद अहम काम को आगे नहीं बढ़ाता, तब तक Wasm cryptography पूरी तरह timing attacks के प्रति बहुत असुरक्षित बनी रहेगी
  • यह दिलचस्प है कि Wasm, WebAssembly का संक्षिप्त रूप है लेकिन acronym नहीं, इसलिए इसे uppercase WASM नहीं लिखा जाता
    • उस तर्क से फिर WAsm सही नहीं होना चाहिए?
    • वैसे acronym होने पर भी कई शब्द lowercase में ही लिखे जाते हैं (जैसे scuba, radar, laser)
    • उम्मीद है सब अच्छा चलेगा, हाहा
  • मैं उन काम करने वाले WASM apps की सूची जानना चाहता हूँ; विचार अच्छा है, लेकिन थोड़ा DAPPs जैसा एहसास होता है — यानी “बस मज़े के लिए मौजूद”; कुछ वास्तविक examples हों तो अच्छा लगेगा
    • madewithwebassembly.com और Awesome-WebAssembly-Applications GitHub की सिफारिश है; इनमें वास्तविक WASM apps अच्छी तरह संकलित हैं
  • यह WASM2 release शानदार है, लेकिन fixed-size SIMD (128-bit) अपनाए जाने पर थोड़ी निराशा है; ARM SVE की तरह compiler अगर device performance के हिसाब से SIMD width adjust कर पाता तो शायद बेहतर होता
    • लेकिन मेरा मानना उल्टा है कि fixed-size SIMD और ज़्यादा use cases खोलता है; vector instructions को fixed-size SIMD से अपेक्षाकृत आसानी से बदला जा सकता है; SIMD हमेशा अनिवार्य नहीं होता, लेकिन register size की वजह से होने वाले opportunistic vectorization के भी कई मामले होते हैं, और वहाँ यह काफ़ी उपयोगी है
    • बहुत जल्दी optimization करना ही समस्या की जड़ है; इस SIMD मुद्दे में भी अगर सिर्फ़ variable-size vector proposal का पालन किया गया होता तो यह कहीं ज़्यादा elegant होता
  • क्या C function जब struct के रूप में value return करता है, तब वह WASM में compile हो सकता है?
    • हो सकता है, लेकिन मेरी जानकारी में अभी उसे JS में “export” नहीं किया जा सकता
  • क्या कोई ऐसा runtime है जिसने WASM2 features पहले से implement किए हों?
    • ज़्यादातर ने तो काफ़ी पहले से ही implementation कर रखा है; Wasm community और working group ने 2022 की शुरुआत में spec final की थी, और प्रमुख implementations उससे पहले से 2.0 उपलब्ध करा रहे थे; 3.0 भी जल्द formalize होने वाला है, और कुछ features पहले से feature flag के जरिए मौजूद हैं
  • web के लिए bytecode एक पुराना सपना रहा है; C# developer के तौर पर यह बात प्रभावशाली लगती है कि Blazor ने शुरुआती दौर से ही WASM को साहसिक रूप से lead किया; .NET, WASM पर काफ़ी आगे है, और मैं इस 2.0 बदलाव को लेकर उत्साहित हूँ