परिचय: जब JavaScript काम करना बंद कर देता है
\n\nहम इस बात के आदी हैं कि पूरा इंटरनेट JavaScript पर चलता है। यह लचीला है, गलतियों को माफ करता है और हर जगह काम करता है। लेकिन कुछ ऐसे कार्य हैं जहां सबसे अनुकूलित JS कोड भी "धीमा" होने लगता है: वीडियो प्रोसेसिंग, 3D रेंडरिंग, जटिल एल्गोरिदम, गेम। और तब मंच पर आते हैं WebAssembly और Rust — एक ऐसी जोड़ी जो वेब एप्लिकेशन को नेटिव कोड की गति प्रदान करती है।
\n\nइस लेख में, हम समझेंगे कि WebAssembly क्या है, क्यों Wasm के लिए Rust सबसे अच्छे विकल्पों में से एक है, और Rust में अपना पहला मॉड्यूल कैसे लिखें जो ब्राउज़र में काम करेगा। यह लेख शुरुआती और उन लोगों दोनों के लिए उपयोगी होगा जिन्होंने Wasm Rust के बारे में सुना है, लेकिन नहीं जानते कि कहां से शुरू करें।
\n\nWebAssembly (Wasm) क्या है?
\n\nWebAssembly एक बाइनरी इंस्ट्रक्शन फॉर्मेट है जो ब्राउज़र में नेटिव के करीब गति से निष्पादित होता है। सीधे शब्दों में कहें तो, यह वेब के लिए एक निम्न-स्तरीय "वर्चुअल प्रोसेसर" है। ब्राउज़र एक कॉम्पैक्ट .wasm फ़ाइल लोड करता है और JavaScript इंटरप्रेटर को छोड़कर सीधे उसे निष्पादित करता है।
\n\nWasm की प्रमुख विशेषताएं:
\n- \n
- उच्च प्रदर्शन — कोड लगभग उतनी ही तेजी से निष्पादित होता है जितना कि संकलित C++ या Rust। \n
- सुरक्षा — Wasm, JS की तरह, एक अलग सैंडबॉक्स में काम करता है। \n
- कॉम्पैक्टनेस — .wasm फ़ाइलें आमतौर पर समान JS कोड से कई गुना छोटी होती हैं। \n
- पोर्टेबिलिटी — एक ही मॉड्यूल सभी आधुनिक ब्राउज़रों पर काम करता है। \n
लेकिन Wasm, JavaScript का विकल्प नहीं है। यह उन कार्यों के लिए एक उपकरण है जहां JS कमजोर है। आप गति-महत्वपूर्ण कोड Rust में लिखते हैं, उसे Wasm में कंपाइल करते हैं, और JS "गोंद" का काम करता है जो इस मॉड्यूल को कॉल करता है।
\n\nWebAssembly के लिए Rust ही क्यों?
\n\nWasm में कंपाइल करने के लिए भाषा का चुनाव महत्वपूर्ण नहीं है। आप C, C++, Go, यहां तक कि Python (Pyodide के माध्यम से) का उपयोग कर सकते हैं। लेकिन WebAssembly के लिए Rust एक डी-फैक्टो मानक बन गया है। क्यों?
\n\n1. बिना गार्बेज कलेक्टर के मेमोरी सुरक्षा
\nRust एकमात्र लोकप्रिय सिस्टम भाषा है जो कंपाइलेशन के समय मेमोरी सुरक्षा की गारंटी देती है। C/C++ के विपरीत, आपको रनटाइम में segfault नहीं मिलेगा। और गार्बेज कलेक्टर (GC) की अनुपस्थिति का मतलब है कि आपको अचानक "फ्रीज़" नहीं मिलते — रियल-टाइम एप्लिकेशन के लिए एकदम सही।
\n\n2. एब्स्ट्रैक्शन की शून्य लागत
\nआप इटरेटर, क्लोजर और ट्रेट्स के साथ उच्च-स्तरीय कोड लिखते हैं, लेकिन Rust कंपाइलर इसे मशीन कोड में बदल देता है जो हाथ से लिखे असेंबली से कम नहीं है। यह आधुनिक भाषाओं की सुविधा के साथ C++ का प्रदर्शन देता है।
\n\n3. wasm-pack और wasm-bindgen की इकोसिस्टम
\nRust को Wasm में कंपाइल करने के उपकरण पूरी तरह से विकसित हैं। wasm-pack प्रोजेक्ट बनाता है, JS रैपर जनरेट करता है और यहां तक कि पैकेज को npm पर प्रकाशित भी करता है। wasm-bindgen Rust और JavaScript के बीच स्ट्रिंग्स, ऐरे और ऑब्जेक्ट को आसानी से पास करने की अनुमति देता है।
4. आउटपुट फ़ाइल का छोटा आकार
\nRust बिना रनटाइम के Wasm में कंपाइल होता है। आपको एक न्यूनतम बाइनरी मिलती है। यहां तक कि स्टैंडर्ड लाइब्रेरी (wasm-pack के माध्यम से) को शामिल करने पर भी, वास्तविक कार्यों के लिए आकार शायद ही कभी 50-100 KB से अधिक होता है।
यह कैसे काम करता है: Wasm के लिए Rust में पहला मॉड्यूल लिखना
\n\nआइए एक सरल मॉड्यूल बनाएं जो डिग्री सेल्सियस को फारेनहाइट और वापस कन्वर्ट करता है। यह आपको पूरी श्रृंखला दिखाएगा: Rust कोड → Wasm → JavaScript से कॉल।
\n\nचरण 1. उपकरण स्थापित करना
\nआपको Rust (rustup के माध्यम से इंस्टॉल करें) और wasm-pack की आवश्यकता होगी:
curl https://sh.rustup.rs -sSf | sh\n# wasm-pack स्थापित करना\ncargo install wasm-pack\n\nचरण 2. प्रोजेक्ट बनाना
\ncargo new --lib temp-converter\ncd temp-converter\n\nCargo.toml खोलें और जोड़ें:
[lib]\ncrate-type = ["cdylib"]\n\n[dependencies]\nwasm-bindgen = "0.2"\n\n