spinny:~/writing $ less webassembly-wasm-complete-guide.md
12WebAssembly (WASM) کی شروعات براؤزر میں C++ چلانے کے ایک طریقے کے طور پر ہوئی۔ 2026 میں، یہ ہر جگہ چلتا ہے - براؤزرز، سرورز، ایج نیٹ ورکس، ایمبیڈڈ ڈیوائسز - اور ویب پر سب سے زیادہ مطالبہ والی کچھ ایپلیکیشنز کو طاقت دیتا ہے۔ Figma کا رینڈرنگ انجن، ویب پر Adobe Photoshop، Google Meet کی ویڈیو پروسیسنگ، اور Cloudflare کا ایج کمپیوٹ پلیٹ فارم سبھی WebAssembly پر چلتے ہیں۔34Chrome Platform Status کے مطابق 2026 کے اوائل میں WASM تمام Chrome پیج لوڈز کا تقریباً 5.5% ہے، جو پچھلے سال 4.5% سے بڑھا ہے۔ WASM 3.0 کے W3C معیار بننے اور WASI کے 1.0 کی طرف پختہ ہونے کے ساتھ، ایکو سسٹم ایک اہم موڑ پر پہنچ گیا ہے۔56یہ گائیڈ WebAssembly کے ساتھ تعمیر شروع کرنے کے لیے آپ کو جو کچھ جاننے کی ضرورت ہے اسے شامل کرتی ہے۔78## WebAssembly کیا ہے؟910WebAssembly ایک بائنری انسٹرکشن فارمیٹ ہے جو ایک compilation target کے طور پر ڈیزائن کیا گیا ہے۔ آپ ایک اعلیٰ سطحی زبان (Rust, C, C++, Go, Kotlin) میں کوڈ لکھتے ہیں، اسے `.wasm` میں کمپائل کرتے ہیں، اور اسے کسی بھی ایسے ماحول میں چلاتے ہیں جس میں WASM رن ٹائم ہے - براؤزرز، Node.js، Cloudflare Workers، Wasmtime، یا Wasmer۔1112```mermaid13graph LR14 Rust[Rust / C / C++] --> Compiler[Compiler]15 Compiler --> WASM[.wasm Binary]16 WASM --> Browser[Browser V8/SpiderMonkey]17 WASM --> Server[Server Wasmtime]18 WASM --> Edge[Edge Cloudflare Workers]19 WASM --> Embedded[Embedded WAMR]20```2122### یہ کیسے کام کرتا ہے2324WASM ایک **stack-based virtual machine** ہے۔ فنکشنز ایک operand stack پر ویلیوز push اور pop کرتے ہیں۔ ہوسٹ رن ٹائم (Chrome میں V8، Firefox میں SpiderMonkey) WASM بائیٹ کوڈ کو نیٹو مشین کوڈ میں JIT-کمپائل کرتا ہے، اسی لیے کارکردگی تقریباً نیٹو ہوتی ہے۔2526اہم خصوصیات:2728- **Sandboxed execution**: WASM ماڈیولز صرف ان وسائل تک رسائی حاصل کر سکتے ہیں جو ہوسٹ واضح طور پر فراہم کرتا ہے۔ اجازت کے بغیر کوئی فائل سسٹم، کوئی نیٹ ورک، کوئی OS رسائی نہیں۔ یہ نیٹو کوڈ سے بنیادی طور پر مختلف ہے۔29- **Linear memory**: WASM اور ہوسٹ کے درمیان مشترکہ ایک واحد مسلسل `ArrayBuffer`۔ پیچیدہ ڈیٹا (strings, structs) میموری میں لکھ کر اور پوائنٹر شیئر کرکے پاس کیا جاتا ہے۔30- **Type-limited**: WASM مقامی طور پر صرف چار اقسام کی حمایت کرتا ہے: `i32`، `i64`، `f32`، `f64`۔ باقی سب کچھ (strings, arrays, objects) کو linear memory یا Component Model کے ذریعے انکوڈنگ کی ضرورت ہوتی ہے۔31- **Portable**: وہی `.wasm` بائنری WASM رن ٹائم والے کسی بھی پلیٹ فارم پر دوبارہ کمپائلیشن کے بغیر چلتی ہے۔3233### WASM بمقابلہ JavaScript3435WASM JavaScript کی جگہ نہیں لیتا۔ یہ اس کا تکمیلی ہے۔3637| پہلو | JavaScript | WebAssembly |38|--------|-----------|-------------|39| **Parsing** | رن ٹائم پر Parse + compile | پہلے سے کمپائل شدہ بائنری، صرف decode |40| **Execution speed** | JIT-آپٹمائزڈ، متغیر | تقریباً نیٹو، مستقل |41| **Startup** | چھوٹی اسکرپٹس کے لیے تیز | تیز decode، قابل پیشگوئی |42| **DOM access** | براہ راست | بالواسطہ (JS گلو کے ذریعے) |43| **Best for** | UI, DOM manipulation, event handling | CPU-بھاری حسابات |44| **Garbage collection** | بلٹ ان | WasmGC (نیا)، یا دستی |4546UI اور DOM کام کے لیے JavaScript استعمال کریں۔ بھاری حسابات کے لیے WASM استعمال کریں: امیج پروسیسنگ، ویڈیو انکوڈنگ، فزکس سمیولیشن، کرپٹوگرافی، ڈیٹا پارسنگ۔4748## WASM 3.0: نیا کیا ہے4950WebAssembly 3.0 ستمبر 2025 میں W3C معیار بنا، جس نے نو ایسی خصوصیات کو معیاری بنایا جو سالوں سے تیاری میں تھیں۔5152| خصوصیت | یہ کیا فعال کرتی ہے |53|---------|----------------|54| **WasmGC** | WASM میں نیٹو garbage collection۔ مینیجڈ زبانیں (Java, Kotlin, Dart) اپنا GC رن ٹائم شپ کیے بغیر WASM میں کمپائل ہو سکتی ہیں۔ Chrome 119+، Firefox 120+، Safari 18.2+ میں سپورٹڈ۔ |55| **Exception Handling** | WASM میں نیٹو `try`/`catch`۔ پہلے، exceptions کے لیے JavaScript تک مہنگے roundtrips کی ضرورت ہوتی تھی۔ |56| **Tail Calls** | اسٹیک اوورفلو کے بغیر موثر recursion کو فعال کرتا ہے۔ فنکشنل زبانوں کے لیے اہم۔ |57| **Relaxed SIMD** | متوازی ڈیٹا پروسیسنگ کے لیے 128-بٹ ویکٹر انسٹرکشنز۔ ہارڈویئر مخصوص آپٹمائزیشنز کو فعال کرتا ہے۔ |58| **Memory64** | 4GB linear memory حد کو توڑتا ہے۔ بڑے پیمانے کی ڈیٹا پروسیسنگ کے لیے ضروری۔ |59| **Multi-memory** | ایک ماڈیول میں متعدد آزاد میموری علاقے۔ |6061سب سے زیادہ اثر انگیز **WasmGC** ہے۔ اس سے پہلے، Java یا Kotlin کو WASM میں کمپائل کرنے کا مطلب تھا بائنری کے حصے کے طور پر ایک مکمل garbage collector شپ کرنا، جو فائل سائز بڑھا دیتا تھا۔ اب براؤزر کا اپنا GC WASM ماڈیولز کے لیے میموری مینجمنٹ سنبھالتا ہے، بالکل ویسے جیسے یہ JavaScript کے لیے کرتا ہے۔6263## WASI: براؤزر سے آگے WebAssembly6465براؤزر میں WASM طاقتور ہے، لیکن **WASI (WebAssembly System Interface)** وہ ہے جو WASM کو ایک آفاقی رن ٹائم بناتا ہے۔ WASI سسٹم وسائل کے لیے معیاری انٹرفیسز فراہم کرتا ہے - فائلز، نیٹ ورکنگ، گھڑیاں، رینڈم نمبرز - جو WASM ماڈیولز کو براؤزر سے باہر چلنے کی اجازت دیتا ہے۔6667```mermaid68graph TD69 subgraph "Browser"70 B[WASM Module] --> Web[Web APIs\nDOM, Fetch, Canvas]71 end7273 subgraph "Server / Edge / Embedded"74 S[WASM Module] --> WASI[WASI Interfaces]75 WASI --> FS[wasi:filesystem]76 WASI --> Net[wasi:sockets]77 WASI --> HTTP[wasi:http]78 WASI --> Clock[wasi:clocks]79 WASI --> Rand[wasi:random]80 end81```8283WASI Preview 2 (موجودہ مستحکم ریلیز) ان انٹرفیسز کی وضاحت کرتا ہے:8485- `wasi:filesystem` - capability handles کے ذریعے فائل آپریشنز (روایتی file descriptors نہیں)86- `wasi:sockets` - TCP/UDP نیٹ ورکنگ87- `wasi:http` - HTTP request/response ہینڈلنگ88- `wasi:clocks` - wall clock, monotonic clock89- `wasi:random` - کرپٹوگرافک رینڈمنس90- `wasi:cli` - کمانڈ لائن آرگیومنٹس، انوائرمنٹ ویریایبلز، stdio9192بنیادی اصول **capability-based security** ہے: ایک WASM ماڈیول فائل سسٹم تک رسائی نہیں حاصل کر سکتا جب تک کہ ہوسٹ واضح طور پر کسی مخصوص ڈائریکٹری کے لیے ہینڈل فراہم نہ کرے۔ یہ WASI کو نیٹو executables چلانے سے بنیادی طور پر زیادہ محفوظ بناتا ہے۔9394### WASI 1.0 کی راہ9596WASI 0.3.0 (async/concurrency primitives شامل کرنا) 2026 میں متوقع ہے، جس کے بعد WASI 1.0 آئے گا۔ اہم اضافہ zero-copy streaming I/O کے ساتھ language-integrated async ہے۔9798## Component Model99100کور WASM ماڈیولز صرف نمبرز کا تبادلہ کر سکتے ہیں۔ **Component Model** WASM کے اوپر ایک امیر type system اور composability تہہ شامل کرکے اس حد کو حل کرتا ہے۔101102### WIT (WebAssembly Interface Types)103104WIT ایک Interface Definition Language ہے جو components کو اپنے imports اور exports کو امیر اقسام کے ساتھ ظاہر کرنے دیتی ہے - strings, records, lists, variants, enums - نہ کہ صرف `i32` اور `f64`۔105106```wit107// calculator.wit108package myorg:calculator@1.0.0;109110interface operations {111 record calculation {112 expression: string,113 result: f64,114 timestamp: u64,115 }116117 add: func(a: f64, b: f64) -> f64;118 multiply: func(a: f64, b: f64) -> f64;119 history: func() -> list<calculation>;120}121122world calculator {123 export operations;124}125```126127`wit-bindgen` جیسے ٹول چینز WIT فائلوں سے زبان مخصوص بائنڈنگز تیار کرتے ہیں۔ ایک Rust component اور ایک Python component WIT معاہدوں کے ذریعے strings, records، اور lists کا تبادلہ کر سکتے ہیں بغیر کسی فریق کو دوسرے کی implementation زبان جانے۔128129## Rust کے ساتھ اپنا پہلا WASM ماڈیول بنانا130131Rust میں سب سے زیادہ پختہ WASM ٹولنگ ہے۔ آئیے ایک عملی مثال بنائیں: ایک امیج پروسیسنگ ماڈیول جو براؤزر میں چلتا ہے۔132133### سیٹ اپ134135```bash136# Install the WASM target for Rust137rustup target add wasm32-unknown-unknown138139# Install wasm-pack (builds Rust to WASM + generates JS bindings)140cargo install wasm-pack141142# Create a new library project143cargo new --lib image-processor144cd image-processor145```146147### Cargo.toml کنفیگر کریں148149```toml150[package]151name = "image-processor"152version = "0.1.0"153edition = "2021"154155[lib]156crate-type = ["cdylib"]157158[dependencies]159wasm-bindgen = "0.2"160```161162### Rust کوڈ لکھیں163164```rust165// src/lib.rs166use wasm_bindgen::prelude::*;167168/// Convert an image buffer to grayscale.169/// Input: RGBA pixel data as a flat u8 array (4 bytes per pixel).170/// Output: Modified in place for zero-copy performance.171#[wasm_bindgen]172pub fn grayscale(pixels: &mut [u8]) {173 for chunk in pixels.chunks_exact_mut(4) {174 let r = chunk[0] as f32;175 let g = chunk[1] as f32;176 let b = chunk[2] as f32;177 // ITU-R BT.709 luminance coefficients178 let gray = (0.2126 * r + 0.7152 * g + 0.0722 * b) as u8;179 chunk[0] = gray;180 chunk[1] = gray;181 chunk[2] = gray;182 // chunk[3] is alpha, leave unchanged183 }184}185186/// Adjust brightness of an image.187/// factor > 1.0 brightens, < 1.0 darkens.188#[wasm_bindgen]189pub fn adjust_brightness(pixels: &mut [u8], factor: f32) {190 for chunk in pixels.chunks_exact_mut(4) {191 chunk[0] = ((chunk[0] as f32 * factor).min(255.0)) as u8;192 chunk[1] = ((chunk[1] as f32 * factor).min(255.0)) as u8;193 chunk[2] = ((chunk[2] as f32 * factor).min(255.0)) as u8;194 }195}196197/// Invert all colors in the image.198#[wasm_bindgen]199pub fn invert(pixels: &mut [u8]) {200 for chunk in pixels.chunks_exact_mut(4) {201 chunk[0] = 255 - chunk[0];202 chunk[1] = 255 - chunk[1];203 chunk[2] = 255 - chunk[2];204 }205}206207/// Calculate the average brightness of an image (0-255).208#[wasm_bindgen]209pub fn average_brightness(pixels: &[u8]) -> f32 {210 let mut total: f64 = 0.0;211 let pixel_count = pixels.len() / 4;212 for chunk in pixels.chunks_exact(4) {213 let luminance = 0.2126 * chunk[0] as f64214 + 0.7152 * chunk[1] as f64215 + 0.0722 * chunk[2] as f64;216 total += luminance;217 }218 (total / pixel_count as f64) as f32219}220```221222### بلڈ223224```bash225wasm-pack build --target web226```227228یہ ایک `pkg/` ڈائریکٹری بناتا ہے جس میں:229- `image_processor_bg.wasm` - کمپائل شدہ WASM بائنری230- `image_processor.js` - TypeScript definitions کے ساتھ JavaScript گلو کوڈ231- `package.json` - npm پر شائع کرنے کے لیے تیار232233### JavaScript میں استعمال کریں234235```html236<!DOCTYPE html>237<html>238<head><title>WASM Image Processor</title></head>239<body>240 <canvas id="canvas" width="800" height="600"></canvas>241 <button onclick="applyGrayscale()">Grayscale</button>242 <button onclick="applyBrightness()">Brighten</button>243 <button onclick="applyInvert()">Invert</button>244245 <script type="module">246 import init, { grayscale, adjust_brightness, invert } from "./pkg/image_processor.js";247248 let ctx;249 let imageData;250251 async function setup() {252 await init();253 const canvas = document.getElementById("canvas");254 ctx = canvas.getContext("2d");255256 // Load an image onto the canvas257 const img = new Image();258 img.onload = () => {259 ctx.drawImage(img, 0, 0);260 imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);261 };262 img.src = "photo.jpg";263 }264265 window.applyGrayscale = () => {266 grayscale(imageData.data);267 ctx.putImageData(imageData, 0, 0);268 };269270 window.applyBrightness = () => {271 adjust_brightness(imageData.data, 1.3);272 ctx.putImageData(imageData, 0, 0);273 };274275 window.applyInvert = () => {276 invert(imageData.data);277 ctx.putImageData(imageData, 0, 0);278 };279280 setup();281 </script>282</body>283</html>284```285286اہم بصیرت: `imageData.data` ایک `Uint8ClampedArray` ہے جو ایک `ArrayBuffer` کی حمایت سے ہے۔ جب WASM کو پاس کیا جاتا ہے، تو یہ ایک ہی میموری شیئر کرتا ہے - کوئی کاپی نہیں۔ Rust فنکشن پکسلز کو in place تبدیل کرتا ہے، اور JavaScript کی طرف فوری طور پر تبدیلیاں نظر آتی ہیں۔287288## نچلی سطح: دستی WASM Instantiation289290اگر آپ `wasm-bindgen` استعمال نہیں کرنا چاہتے، تو آپ براہ راست WASM ماڈیولز کو instantiate کر سکتے ہیں:291292```javascript293const response = await fetch("calculator.wasm");294const { instance } = await WebAssembly.instantiateStreaming(response, {295 env: {296 // Functions the WASM module can call297 log_result: (value) => console.log("Result:", value),298 },299});300301// Call exported functions302const { add, multiply } = instance.exports;303console.log(add(5, 3)); // 8304console.log(multiply(4, 7)); // 28305```306307یہ اس وقت مفید ہے جب آپ کم سے کم اوورہیڈ چاہتے ہیں اور امیر type interop کی ضرورت نہیں ہے۔308309## کارکردگی: WASM بمقابلہ JavaScript310311حقیقی دنیا کے بینچ مارکس CPU-بھاری کاموں کے لیے نمایاں سپیڈ اپ دکھاتے ہیں:312313| کام | JavaScript | WASM | سپیڈ اپ |314|------|-----------|------|---------|315| 4K امیج پروسیسنگ | 180ms | 8ms (SIMD کے ساتھ) | 22x |316| امیج resize (4K) | 250ms | 45ms | 5.5x |317| فزکس سمیولیشن (10K entities) | فریم ڈراپ | ہموار 60fps | ~10x |318| JSON پارسنگ (بڑا payload) | 12ms | 3ms | 4x |319| کرپٹوگرافک ہیشنگ | 45ms | 6ms | 7.5x |320321WASM نیٹو کوڈ کی تقریباً 95% رفتار پر چلتا ہے۔ سب سے بڑے فوائد ان سے آتے ہیں:322- قابل پیشگوئی کارکردگی (کوئی JIT warmup نہیں، کوئی GC pauses نہیں)323- متوازی ڈیٹا پروسیسنگ کے لیے SIMD instructions324- garbage collector مداخلت کے بغیر direct memory access325326جہاں WASM تیز نہیں ہے: DOM manipulation، چھوٹی حسابات، I/O-bound کام۔ ان کے لیے JavaScript پہلے سے آپٹمائزڈ ہے۔327328## پروڈکشن استعمال کے کیسز329330### Figma: ریئل ٹائم ویکٹر رینڈرنگ331332Figma کا بنیادی رینڈرنگ انجن C++ ہے جو WASM میں کمپائل کیا گیا ہے۔ ہر shape، gradient، اور effect WASM میں حساب کیا جاتا ہے اور ایک Canvas element پر ڈرا کیا جاتا ہے۔ یہ Figma کو براؤزر میں ہزاروں layers والے پیچیدہ ڈیزائنز کو 60fps پر سنبھالنے کی اجازت دیتا ہے - ایک ایسی کارکردگی جو خالص JavaScript میں ناممکن ہوگی۔333334### ویب پر Adobe Photoshop335336Adobe نے Rust استعمال کرکے اہم Photoshop فلٹرز اور ٹولز کو WASM میں پورٹ کیا۔ ان کے بینچ مارکس WASM SIMD کے ساتھ 22ms میں 4K امیج پروسیسنگ دکھاتے ہیں بمقابلہ JavaScript میں 180ms - 8x بہتری جو ریئل ٹائم فلٹر پریویوز کو ممکن بناتی ہے۔337338### Cloudflare Workers339340Cloudflare 330+ ایج لوکیشنز پر V8 isolates میں WASM ماڈیولز چلاتا ہے۔ Cold starts 1-5ms ہیں (container-based serverless کے لیے 100-500ms کے مقابلے میں)۔ فروری 2026 میں، انہوں نے WASM استعمال کرکے اپنے ایج نیٹ ورک پر Llama-3-8b inference تعینات کیا۔341342### Google Meet343344Google Meet میں بیک گراؤنڈ بلر اور ورچوئل بیک گراؤنڈز ریئل ٹائم ویڈیو پروسیسنگ کے لیے SIMD کے ساتھ WASM استعمال کرتے ہیں۔ WASM ماڈیول ہر ویڈیو فریم کو اتنی تیزی سے پروسیس کرتا ہے کہ 30fps پر ہموار ویڈیو برقرار رہے۔345346## براؤزر سپورٹ (2026)347348| خصوصیت | Chrome | Firefox | Safari | Edge |349|---------|--------|---------|--------|------|350| Core WASM | مکمل | مکمل | مکمل | مکمل |351| Threads | ہاں | ہاں | ہاں | ہاں |352| SIMD (128-bit) | ہاں | ہاں | ہاں | ہاں |353| WasmGC | 119+ | 120+ | 18.2+ | ہاں |354| Exception Handling | ہاں | ہاں | ہاں | ہاں |355| Memory64 | ہاں | ہاں | جزوی | ہاں |356357تمام بڑے براؤزرز مکمل طور پر WASM سپورٹ کرتے ہیں۔ نئی خصوصیات (WasmGC, Exception Handling) وسیع دستیابی تک پہنچ چکی ہیں۔358359## ٹولنگ حوالہ360361| ٹول | مقصد | انسٹال |362|------|---------|---------|363| **wasm-pack** | Rust کو WASM میں بلڈ کریں، npm پیکجز بنائیں | `cargo install wasm-pack` |364| **wasm-bindgen** | Rust/JS interop bindings (wasm-pack استعمال کرتا ہے) | Cargo.toml میں Dependency |365| **wasm-opt** | بائنری سائز آپٹمائزیشن (50%+ کمی) | Binaryen کا حصہ: `brew install binaryen` |366| **wit-bindgen** | WIT فائلوں سے bindings بنائیں | `cargo install wit-bindgen-cli` |367| **Wasmtime** | سرور سائیڈ WASM رن ٹائم (حوالہ WASI implementation) | `brew install wasmtime` |368| **Wasmer** | WASI سپورٹ کے ساتھ متبادل WASM رن ٹائم | `curl https://get.wasmer.io -sSfL \| sh` |369| **wasm-feature-detect** | رن ٹائم براؤزر فیچر ڈیٹیکشن | `npm install wasm-feature-detect` |370371### بائنری سائز کی آپٹمائزیشن372373WASM بائنریز بڑی ہو سکتی ہیں۔ انہیں چھوٹا کرنے کا طریقہ:374375```toml376# Cargo.toml377[profile.release]378opt-level = "z" # Optimize for size379lto = true # Link-time optimization380codegen-units = 1 # Better optimization, slower compile381strip = true # Strip debug symbols382```383384```bash385# Build in release mode386wasm-pack build --release --target web387388# Further optimize with wasm-opt389wasm-opt -Oz pkg/image_processor_bg.wasm -o pkg/image_processor_bg.wasm390```391392ایک عام Rust WASM ماڈیول ان آپٹمائزیشنز کے ساتھ 500KB سے 50KB سے کم ہو جاتا ہے۔393394## شروع کرنے کا روڈ میپ395396```mermaid397flowchart TD398 A[Week 1: Basics] --> B[Week 2: Real Project]399 B --> C[Week 3: WASI and Server-side]400 C --> D[Month 2+: Production]401402 A --> A1[Install Rust + wasm-pack]403 A --> A2[Build hello-world WASM module]404 A --> A3[Call WASM functions from JavaScript]405406 B --> B1[Build image processor or game physics]407 B --> B2[Use wasm-bindgen for rich types]408 B --> B3[Benchmark against pure JS]409410 C --> C1[Run WASM with Wasmtime]411 C --> C2[Explore WASI interfaces]412 C --> C3[Try Component Model with WIT]413414 D --> D1[Optimize binary size]415 D --> D2[Use SIMD for parallelism]416 D --> D3[Deploy to Cloudflare Workers or browser]417```418419## نتیجہ420421WebAssembly اب تجرباتی نہیں رہا۔ یہ ایک پروڈکشن ٹیکنالوجی ہے جو ویب پر سب سے زیادہ مطالبہ والی کچھ ایپلیکیشنز استعمال کرتی ہیں۔ تقریباً نیٹو کارکردگی، sandboxed سیکیورٹی، اور آفاقی پورٹیبلٹی - کوئی اور compilation target آپ کو یہ تینوں نہیں دیتا۔422423آپ کو WASM میں اپنی پوری ایپلیکیشن دوبارہ لکھنے کی ضرورت نہیں ہے۔ ایک واحد CPU-بھاری فنکشن سے شروع کریں - ایک امیج فلٹر، ایک ڈیٹا پارسر، ایک فزکس حساب - اسے WASM میں کمپائل کریں، اور JavaScript سے کال کریں۔ فرق ماپیں۔ پھر فیصلہ کریں کہ WASM اور کہاں مدد کر سکتا ہے۔424425ٹولنگ پختہ ہے، براؤزر سپورٹ آفاقی ہے، اور ایکو سسٹم بڑھ رہا ہے۔ اگر آپ Rust لکھتے ہیں، تو آپ پہلے سے ہی براؤزر سے ایک کمانڈ دور ہیں۔426427> **شروع کرنے کی چیک لسٹ:**428>429> - [x] Rust اور wasm-pack انسٹال ہو چکے ہیں430> - [x] پہلا WASM ماڈیول بنایا اور براؤزر میں چل رہا ہے431> - [x] JavaScript interop کام کر رہا ہے (JS سے WASM کال کرنا)432> - [x] سائز آپٹمائزیشنز کے ساتھ release build لاگو433> - [x] خالص JavaScript مساوی کے مقابلے میں کارکردگی بینچ مارک کیا434> - [x] سرور سائیڈ استعمال کے کیسز کے لیے Wasmtime کے ساتھ WASI کی تحقیق کی435
:ویب ڈویلپرز کے لیے WebAssembly: صفر سے پروڈکشن تکlines 1-435 (END) — press q to close