सामान्य विवरण
312 पृष्ठों की पुस्तक में 11 अध्याय हैं। पाठ के अलावा, इसमें कोड की बहुत अधिक मात्रा है। साथ ही, विभिन्न उदाहरणों को समझाने के लिए कई चित्रात्मक चित्र भी शामिल हैं। पढ़ने का स्तर — कठिन है। प्रत्येक अध्याय के अंत में एक संक्षिप्त सारांश दिया गया है।
संक्षिप्त अवलोकन
पहले दो अध्याय तकनीक के साथ परिचय के रूप में हैं। लेखक बताता है कि WebAssembly की आवश्यकता क्यों है और यह कहाँ उपयोग की जाती है, साथ ही इसके साथ बातचीत करने के तरीके भी दिखाता है। WebAssembly में पाठ प्रारूप (WAT) का परिचय दिया जाता है और पहला प्रोग्राम — "Hello, World!" समझाया जाता है। लगभग पूरी पुस्तक में, WAT का ही उपयोग किया जाता है।
अगला अध्याय फ़ंक्शन और JavaScript के साथ घनिष्ठ एकीकरण को समर्पित है। डेटा प्रकार, चर (ग्लोबल और लोकल) के साथ काम, शर्तसरचनाएँ (if/else), लूप और शाखाएँ विस्तार से समझाई गई हैं। इन विषयों में से कुछ का उल्लेख पहले ही दूसरे अध्याय में भी किया जा चुका है।
उसके बाद एक मुख्य रूप से सैद्धांतिक अध्याय आता है, जो संख्याओं के साथ काम करने पर केंद्रित है। यदि आपने कभी प्रत्यक्ष, उल्टे और पूरक कोड में संख्याओं के प्रतिनिधित्व के साथ-साथ बिटवाइज़ ऑपरेशन (शिफ्ट, मास्क, XOR) के साथ कार्य किया है, तो आपके लिए यह अध्याय आसान रहेगा — और आपमें थोड़ी नोस्टैल्जिया जग सकता है।
इसके बाद स्ट्रिंग्स पर आधारित अध्याय है: ASCII और Unicode प्रतिनिधित्व, रैखिक मेमोरी में स्ट्रिंग्स का भंडारण और अन्य कई विवरण शामिल हैं।
आगे का अध्याय रैखिक मेमोरी के साथ काम करने पर विस्तृत चर्चा करता है। इसके आधार पर एक रोचक उदाहरण विकसित किया जाता है — ऑब्जेक्ट्स के बीच टकराव का पता लगाने वाला प्रोग्राम। बाद में इस उदाहरण को और विकसित किया जाता है और जटिल बनाया जाता है।
उसके बाद, कई अध्याय पूर्ण मिनी वेब एप्लिकेशन निर्माण को समर्पित हैं। इनमें से एक में Node.js सर्वर सेटअप और DOM के साथ इंटरैक्शन लागू किया जाता है, दूसरे में Canvas के साथ कार्य दिखाया जाता है।
इसके बाद लेखक WebAssembly-कोड को डीबग करने, त्रुटियाँ खोजने और ठीक करने और संसाधन-गहन फ़ंक्शन पहचानने के बारे में बताता है। इन्हीं मुद्दों को दो अध्यायों में समर्पित किया गया है।
पुस्तक का अंतिम अध्याय AssemblyScript पर है — एक उच्च-स्तरीय भाषा जो विशेष रूप से WebAssembly के लिए विकसित की गई है। अन्य दृष्टिकोणों के साथ प्रदर्शन की तुलना भी की गई है।
मेरी राय
इस वर्ष WebAssembly को 10 साल पूरे हो गए हैं — एक पर्याप्त परिपक्व आयु जिससे हम समझ सकें कि तकनीक ने कितनी उम्मीदों पर खरा उतरा और बाजार में इसकी क्या स्थिति है। निश्चित रूप से, Google (डॉक्स), Figma, Photoshop जैसी बड़ी कंपनियाँ हैं जहां जटिल भाग (कभी-कभी पूरे मॉड्यूल) WebAssembly में फिर से लिखे गए हैं। लेकिन कुल मिलाकर, वेब में इस तकनीक का प्रसार धीमा है, और JavaScript / TypeScript अभी भी प्रतिस्पर्धा से परे हैं।
शायद इसका कारण निर्मित गार्बेज कलेक्टर की अनुपस्थिति है, जो WebAssembly को Python या Java जैसी भाषाओं के लिए कम उपयुक्त बनाती है। C++ या Rust के विपरीत, जिनकी डिज़ाइन पहले से ही मेमोरी प्रबंधन को ध्यान में रखकर की गई थी, इन भाषाओं के लिए WebAssembly में "फिट" होना अधिक कठिन है (हालांकि पिछले कुछ वर्षों में इस क्षेत्र में उल्लेखनीय प्रगति देखी गई है)। साथ ही, सीधे DOM के साथ कार्य करने की अनुपस्थिति भी एक बाधा है, और कंपाइल हुई सुपरस्ट्रक्चर के माध्यम से WebAssembly का उपयोग करने या JavaScript से बहुत अधिक कॉल्स करने के प्रयास से अंतिम समाधान नेटिव JS-कोड की तुलना में भी कम कुशल हो सकता है।
इस पुस्तक को पढ़ते समय, यह धीरे-धीरे स्पष्ट होता जाता है कि WebAssembly आज भी सीमित परिदृश्यों में क्यों उपयोग होती है और व्यावहारिक विकास में इसे व्यापक स्थान क्यों नहीं मिला। यह वाकई में एक कठिन तकनीक है। कल्पना करें कि आपने असेंबलर को थोड़े उच्च स्तरीय भाषा के साथ मिलाया है, और फिर Lisp जैसा सिंटैक्स जोड़ दिया है। बुक पढ़ते समय लगभग ऐसी ही भावना उत्पन्न होती है। मैं लंबे समय तक लो-लेवल कोड पर काम नहीं किया हूँ, इसलिए कई अध्यायों को समझने में कठिनाई का अनुभव हुआ। निश्चित रूप से, मुझे कई पल ऐसे भी मिले जब मैं दृष्टिकोण से प्रभावित था और कोड का विश्लेषण करने में आनंद लिया। हालांकि, समग्र रूप से पुस्तक कठिन लगी। पहली बार मुझे लेखक के वाक्यों को कम बनाकर सारांशित करने की इच्छा हुई — ताकि अर्थ को बेहतर ढंग से प्रकट किया जा सके।
WebAssembly के सामान्य ज्ञान और WAT से परिचित होने के लिए यह पुस्तक बहुत अच्छी है। लेकिन इसे पढ़कर तुरंत कामकाजी प्रोजेक्ट में तकनीक को लागू करने के लिए यह स्पष्ट रूप से पर्याप्त नहीं है।