spinny:~/writing $ vim webassembly-wasm-complete-guide.md
1~2WebAssembly (WASM) کی شروعات براؤزر میں C++ چلانے کے ایک طریقے کے طور پر ہوئی۔ 2026 میں، یہ ہر جگہ چلتا ہے - براؤزرز، سرورز، ایج نیٹ ورکس، ایمبیڈڈ ڈیوائسز - اور ویب پر سب سے زیادہ مطالبہ والی کچھ ایپلیکیشنز کو طاقت دیتا ہے۔ Figma کا رینڈرنگ انجن، ویب پر Adobe Photoshop، Google Meet کی ویڈیو پروسیسنگ، اور Cloudflare کا ایج کمپیوٹ پلیٹ فارم سبھی WebAssembly پر چلتے ہیں۔3~4Chrome Platform Status کے مطابق 2026 کے اوائل میں WASM تمام Chrome پیج لوڈز کا تقریباً 5.5% ہے، جو پچھلے سال 4.5% سے بڑھا ہے۔ WASM 3.0 کے W3C معیار بننے اور WASI کے 1.0 کی طرف پختہ ہونے کے ساتھ، ایکو سسٹم ایک اہم موڑ پر پہنچ گیا ہے۔5~6یہ گائیڈ WebAssembly کے ساتھ تعمیر شروع کرنے کے لیے آپ کو جو کچھ جاننے کی ضرورت ہے اسے شامل کرتی ہے۔7~8## WebAssembly کیا ہے؟9~10WebAssembly ایک بائنری انسٹرکشن فارمیٹ ہے جو ایک compilation target کے طور پر ڈیزائن کیا گیا ہے۔ آپ ایک اعلیٰ سطحی زبان (Rust, C, C++, Go, Kotlin) میں کوڈ لکھتے ہیں، اسے `.wasm` میں کمپائل کرتے ہیں، اور اسے کسی بھی ایسے ماحول میں چلاتے ہیں جس میں WASM رن ٹائم ہے - براؤزرز، Node.js، Cloudflare Workers، Wasmtime، یا Wasmer۔11~12```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```21~22### یہ کیسے کام کرتا ہے23~24WASM ایک **stack-based virtual machine** ہے۔ فنکشنز ایک operand stack پر ویلیوز push اور pop کرتے ہیں۔ ہوسٹ رن ٹائم (Chrome میں V8، Firefox میں SpiderMonkey) WASM بائیٹ کوڈ کو نیٹو مشین کوڈ میں JIT-کمپائل کرتا ہے، اسی لیے کارکردگی تقریباً نیٹو ہوتی ہے۔25~26اہم خصوصیات:27~28- **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 رن ٹائم والے کسی بھی پلیٹ فارم پر دوبارہ کمپائلیشن کے بغیر چلتی ہے۔32~33### WASM بمقابلہ JavaScript34~35WASM JavaScript کی جگہ نہیں لیتا۔ یہ اس کا تکمیلی ہے۔36~37| پہلو | 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 (نیا)، یا دستی |45~46UI اور DOM کام کے لیے JavaScript استعمال کریں۔ بھاری حسابات کے لیے WASM استعمال کریں: امیج پروسیسنگ، ویڈیو انکوڈنگ، فزکس سمیولیشن، کرپٹوگرافی، ڈیٹا پارسنگ۔47~48## WASM 3.0: نیا کیا ہے49~50WebAssembly 3.0 ستمبر 2025 میں W3C معیار بنا، جس نے نو ایسی خصوصیات کو معیاری بنایا جو سالوں سے تیاری میں تھیں۔51~52| خصوصیت | یہ کیا فعال کرتی ہے |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** | ایک ماڈیول میں متعدد آزاد میموری علاقے۔ |60~61سب سے زیادہ اثر انگیز **WasmGC** ہے۔ اس سے پہلے، Java یا Kotlin کو WASM میں کمپائل کرنے کا مطلب تھا بائنری کے حصے کے طور پر ایک مکمل garbage collector شپ کرنا، جو فائل سائز بڑھا دیتا تھا۔ اب براؤزر کا اپنا GC WASM ماڈیولز کے لیے میموری مینجمنٹ سنبھالتا ہے، بالکل ویسے جیسے یہ JavaScript کے لیے کرتا ہے۔62~63## WASI: براؤزر سے آگے WebAssembly64~65براؤزر میں WASM طاقتور ہے، لیکن **WASI (WebAssembly System Interface)** وہ ہے جو WASM کو ایک آفاقی رن ٹائم بناتا ہے۔ WASI سسٹم وسائل کے لیے معیاری انٹرفیسز فراہم کرتا ہے - فائلز، نیٹ ورکنگ، گھڑیاں، رینڈم نمبرز - جو WASM ماڈیولز کو براؤزر سے باہر چلنے کی اجازت دیتا ہے۔66~67```mermaid68graph TD69 subgraph "Browser"70 B[WASM Module] --> Web[Web APIs\nDOM, Fetch, Canvas]71 end72~73 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```82~83WASI Preview 2 (موجودہ مستحکم ریلیز) ان انٹرفیسز کی وضاحت کرتا ہے:84~85- `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` - کمانڈ لائن آرگیومنٹس، انوائرمنٹ ویریایبلز، stdio91~92بنیادی اصول **capability-based security** ہے: ایک WASM ماڈیول فائل سسٹم تک رسائی نہیں حاصل کر سکتا جب تک کہ ہوسٹ واضح طور پر کسی مخصوص ڈائریکٹری کے لیے ہینڈل فراہم نہ کرے۔ یہ WASI کو نیٹو executables چلانے سے بنیادی طور پر زیادہ محفوظ بناتا ہے۔93~94### WASI 1.0 کی راہ95~96WASI 0.3.0 (async/concurrency primitives شامل کرنا) 2026 میں متوقع ہے، جس کے بعد WASI 1.0 آئے گا۔ اہم اضافہ zero-copy streaming I/O کے ساتھ language-integrated async ہے۔97~98## Component Model99~100کور WASM ماڈیولز صرف نمبرز کا تبادلہ کر سکتے ہیں۔ **Component Model** WASM کے اوپر ایک امیر type system اور composability تہہ شامل کرکے اس حد کو حل کرتا ہے۔101~102### WIT (WebAssembly Interface Types)103~104WIT ایک Interface Definition Language ہے جو components کو اپنے imports اور exports کو امیر اقسام کے ساتھ ظاہر کرنے دیتی ہے - strings, records, lists, variants, enums - نہ کہ صرف `i32` اور `f64`۔105~106```wit107// calculator.wit108package myorg:calculator@1.0.0;109~110interface operations {111 record calculation {112 expression: string,113 result: f64,114 timestamp: u64,115 }116~117 add: func(a: f64, b: f64) -> f64;118 multiply: func(a: f64, b: f64) -> f64;119 history: func() -> list<calculation>;120}121~122world calculator {123 export operations;124}125```126~127`wit-bindgen` جیسے ٹول چینز WIT فائلوں سے زبان مخصوص بائنڈنگز تیار کرتے ہیں۔ ایک Rust component اور ایک Python component WIT معاہدوں کے ذریعے strings, records، اور lists کا تبادلہ کر سکتے ہیں بغیر کسی فریق کو دوسرے کی implementation زبان جانے۔128~129## Rust کے ساتھ اپنا پہلا WASM ماڈیول بنانا130~131Rust میں سب سے زیادہ پختہ WASM ٹولنگ ہے۔ آئیے ایک عملی مثال بنائیں: ایک امیج پروسیسنگ ماڈیول جو براؤزر میں چلتا ہے۔132~133### سیٹ اپ134~135```bash136# Install the WASM target for Rust137rustup target add wasm32-unknown-unknown138~139# Install wasm-pack (builds Rust to WASM + generates JS bindings)140cargo install wasm-pack141~142# Create a new library project143cargo new --lib image-processor144cd image-processor145```146~147### Cargo.toml کنفیگر کریں148~149```toml150[package]151name = "image-processor"152version = "0.1.0"153edition = "2021"154~155[lib]156crate-type = ["cdylib"]157~158[dependencies]159wasm-bindgen = "0.2"160```161~162### Rust کوڈ لکھیں163~164```rust165// src/lib.rs166use wasm_bindgen::prelude::*;167~168/// 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}185~186/// 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}196~197/// 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}206~207/// 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```221~222### بلڈ223~224```bash225wasm-pack build --target web226```227~228یہ ایک `pkg/` ڈائریکٹری بناتا ہے جس میں:229- `image_processor_bg.wasm` - کمپائل شدہ WASM بائنری230- `image_processor.js` - TypeScript definitions کے ساتھ JavaScript گلو کوڈ231- `package.json` - npm پر شائع کرنے کے لیے تیار232~233### JavaScript میں استعمال کریں234~235```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>244~245 <script type="module">246 import init, { grayscale, adjust_brightness, invert } from "./pkg/image_processor.js";247~248 let ctx;249 let imageData;250~251 async function setup() {252 await init();253 const canvas = document.getElementById("canvas");254 ctx = canvas.getContext("2d");255~256 // 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 }264~265 window.applyGrayscale = () => {266 grayscale(imageData.data);267 ctx.putImageData(imageData, 0, 0);268 };269~270 window.applyBrightness = () => {271 adjust_brightness(imageData.data, 1.3);272 ctx.putImageData(imageData, 0, 0);273 };274~275 window.applyInvert = () => {276 invert(imageData.data);277 ctx.putImageData(imageData, 0, 0);278 };279~280 setup();281 </script>282</body>283</html>284```285~286اہم بصیرت: `imageData.data` ایک `Uint8ClampedArray` ہے جو ایک `ArrayBuffer` کی حمایت سے ہے۔ جب WASM کو پاس کیا جاتا ہے، تو یہ ایک ہی میموری شیئر کرتا ہے - کوئی کاپی نہیں۔ Rust فنکشن پکسلز کو in place تبدیل کرتا ہے، اور JavaScript کی طرف فوری طور پر تبدیلیاں نظر آتی ہیں۔287~288## نچلی سطح: دستی WASM Instantiation289~290اگر آپ `wasm-bindgen` استعمال نہیں کرنا چاہتے، تو آپ براہ راست WASM ماڈیولز کو instantiate کر سکتے ہیں:291~292```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});300~301// Call exported functions302const { add, multiply } = instance.exports;303console.log(add(5, 3)); // 8304console.log(multiply(4, 7)); // 28305```306~307یہ اس وقت مفید ہے جب آپ کم سے کم اوورہیڈ چاہتے ہیں اور امیر type interop کی ضرورت نہیں ہے۔308~309## کارکردگی: WASM بمقابلہ JavaScript310~311حقیقی دنیا کے بینچ مارکس CPU-بھاری کاموں کے لیے نمایاں سپیڈ اپ دکھاتے ہیں:312~313| کام | 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 |320~321WASM نیٹو کوڈ کی تقریباً 95% رفتار پر چلتا ہے۔ سب سے بڑے فوائد ان سے آتے ہیں:322- قابل پیشگوئی کارکردگی (کوئی JIT warmup نہیں، کوئی GC pauses نہیں)323- متوازی ڈیٹا پروسیسنگ کے لیے SIMD instructions324- garbage collector مداخلت کے بغیر direct memory access325~326جہاں WASM تیز نہیں ہے: DOM manipulation، چھوٹی حسابات، I/O-bound کام۔ ان کے لیے JavaScript پہلے سے آپٹمائزڈ ہے۔327~328## پروڈکشن استعمال کے کیسز329~330### Figma: ریئل ٹائم ویکٹر رینڈرنگ331~332Figma کا بنیادی رینڈرنگ انجن C++ ہے جو WASM میں کمپائل کیا گیا ہے۔ ہر shape، gradient، اور effect WASM میں حساب کیا جاتا ہے اور ایک Canvas element پر ڈرا کیا جاتا ہے۔ یہ Figma کو براؤزر میں ہزاروں layers والے پیچیدہ ڈیزائنز کو 60fps پر سنبھالنے کی اجازت دیتا ہے - ایک ایسی کارکردگی جو خالص JavaScript میں ناممکن ہوگی۔333~334### ویب پر Adobe Photoshop335~336Adobe نے Rust استعمال کرکے اہم Photoshop فلٹرز اور ٹولز کو WASM میں پورٹ کیا۔ ان کے بینچ مارکس WASM SIMD کے ساتھ 22ms میں 4K امیج پروسیسنگ دکھاتے ہیں بمقابلہ JavaScript میں 180ms - 8x بہتری جو ریئل ٹائم فلٹر پریویوز کو ممکن بناتی ہے۔337~338### Cloudflare Workers339~340Cloudflare 330+ ایج لوکیشنز پر V8 isolates میں WASM ماڈیولز چلاتا ہے۔ Cold starts 1-5ms ہیں (container-based serverless کے لیے 100-500ms کے مقابلے میں)۔ فروری 2026 میں، انہوں نے WASM استعمال کرکے اپنے ایج نیٹ ورک پر Llama-3-8b inference تعینات کیا۔341~342### Google Meet343~344Google Meet میں بیک گراؤنڈ بلر اور ورچوئل بیک گراؤنڈز ریئل ٹائم ویڈیو پروسیسنگ کے لیے SIMD کے ساتھ WASM استعمال کرتے ہیں۔ WASM ماڈیول ہر ویڈیو فریم کو اتنی تیزی سے پروسیس کرتا ہے کہ 30fps پر ہموار ویڈیو برقرار رہے۔345~346## براؤزر سپورٹ (2026)347~348| خصوصیت | 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 | ہاں | ہاں | جزوی | ہاں |356~357تمام بڑے براؤزرز مکمل طور پر WASM سپورٹ کرتے ہیں۔ نئی خصوصیات (WasmGC, Exception Handling) وسیع دستیابی تک پہنچ چکی ہیں۔358~359## ٹولنگ حوالہ360~361| ٹول | مقصد | انسٹال |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` |370~371### بائنری سائز کی آپٹمائزیشن372~373WASM بائنریز بڑی ہو سکتی ہیں۔ انہیں چھوٹا کرنے کا طریقہ:374~375```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```383~384```bash385# Build in release mode386wasm-pack build --release --target web387~388# Further optimize with wasm-opt389wasm-opt -Oz pkg/image_processor_bg.wasm -o pkg/image_processor_bg.wasm390```391~392ایک عام Rust WASM ماڈیول ان آپٹمائزیشنز کے ساتھ 500KB سے 50KB سے کم ہو جاتا ہے۔393~394## شروع کرنے کا روڈ میپ395~396```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]401~402 A --> A1[Install Rust + wasm-pack]403 A --> A2[Build hello-world WASM module]404 A --> A3[Call WASM functions from JavaScript]405~406 B --> B1[Build image processor or game physics]407 B --> B2[Use wasm-bindgen for rich types]408 B --> B3[Benchmark against pure JS]409~410 C --> C1[Run WASM with Wasmtime]411 C --> C2[Explore WASI interfaces]412 C --> C3[Try Component Model with WIT]413~414 D --> D1[Optimize binary size]415 D --> D2[Use SIMD for parallelism]416 D --> D3[Deploy to Cloudflare Workers or browser]417```418~419## نتیجہ420~421WebAssembly اب تجرباتی نہیں رہا۔ یہ ایک پروڈکشن ٹیکنالوجی ہے جو ویب پر سب سے زیادہ مطالبہ والی کچھ ایپلیکیشنز استعمال کرتی ہیں۔ تقریباً نیٹو کارکردگی، sandboxed سیکیورٹی، اور آفاقی پورٹیبلٹی - کوئی اور compilation target آپ کو یہ تینوں نہیں دیتا۔422~423آپ کو WASM میں اپنی پوری ایپلیکیشن دوبارہ لکھنے کی ضرورت نہیں ہے۔ ایک واحد CPU-بھاری فنکشن سے شروع کریں - ایک امیج فلٹر، ایک ڈیٹا پارسر، ایک فزکس حساب - اسے WASM میں کمپائل کریں، اور JavaScript سے کال کریں۔ فرق ماپیں۔ پھر فیصلہ کریں کہ WASM اور کہاں مدد کر سکتا ہے۔424~425ٹولنگ پختہ ہے، براؤزر سپورٹ آفاقی ہے، اور ایکو سسٹم بڑھ رہا ہے۔ اگر آپ Rust لکھتے ہیں، تو آپ پہلے سے ہی براؤزر سے ایک کمانڈ دور ہیں۔426~427> **شروع کرنے کی چیک لسٹ:**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~
NORMAL · webassembly-wasm-complete-guide.md [readonly]435 lines · :q to close