WebAssembly और Swift का परिचय
\nWebAssembly (WASM) एक निम्न-स्तरीय बाइनरी निर्देश प्रारूप है जो विभिन्न भाषाओं (C, C++, Rust, Swift) में लिखे कोड को ब्राउज़र और उसके बाहर नेटिव गति के करीब चलाने की अनुमति देता है। iOS और macOS प्लेटफ़ॉर्म पर Swift डेवलपर्स के लिए, WebAssembly के साथ एकीकरण नई संभावनाएँ खोलता है: मौजूदा लाइब्रेरीज़ को स्थानांतरित करना, कम्प्यूटेशनल कार्यों को गति देना और क्रॉस-प्लेटफ़ॉर्म एकीकरण।
\nइस लेख में, आप सीखेंगे कि वातावरण कैसे सेट करें, Swift कोड को WASM में कंपाइल करें और इसे नेटिव एप्लिकेशन से कैसे कॉल करें। हम व्यावहारिक उदाहरण देखेंगे और सामान्य गलतियों का विश्लेषण करेंगे।
\n\n1. WebAssembly की मूल बातें: आर्किटेक्चर और लाभ
\nWebAssembly एक वर्चुअल मशीन है जिसमें रैखिक मेमोरी और सख्त टाइपिंग है। मुख्य विशेषताएँ:
\n- \n
- सुरक्षा — पृथक निष्पादन (सैंडबॉक्स); \n
- प्रदर्शन — प्री-कंपाइलेशन के कारण नेटिव के करीब; \n
- कॉम्पैक्टनेस — बाइनरी .wasm प्रारूप कम जगह लेता है; \n
- एकीकरण — JavaScript, Swift, Rust से आसानी से कॉल किया जा सकता है। \n
Swift के लिए SwiftWasm प्रोजेक्ट मौजूद है, जो Swift कोड को WASM में कंपाइल करने की अनुमति देता है। यह कम्प्यूटेशनल मॉड्यूल बनाने के लिए विशेष रूप से उपयोगी है, जिनका उपयोग बाद में iOS ऐप्स में किया जाता है।
\n\n2. SwiftWasm के लिए वातावरण सेट करना
\nकोड लिखने से पहले, टूल्स इंस्टॉल करें। टर्मिनल खोलें और निष्पादित करें:
\n# SwiftWasm इंस्टॉल करना (Homebrew के माध्यम से)\nbrew install swiftwasm/tap/swiftwasm\n\n# वर्शन जाँचें\nswift --version\nस्थानीय परीक्षण के लिए wasmtime की भी आवश्यकता होगी:
\nbrew install wasmtime\nएक नया Swift पैकेज बनाएँ:
\nmkdir MyWasmApp && cd MyWasmApp\nswift package init --type executable\n\n3. Swift मॉड्यूल लिखना और WASM में कंपाइल करना
\nएक सरल उदाहरण देखें — दो संख्याओं को जोड़ने का फ़ंक्शन। फ़ाइल Sources/main.swift को संपादित करें:
@_extern(wasm, module: "env", name: "add")\nfunc add(_ a: Int, _ b: Int) -> Int\n\n@main\nstruct App {\n static func main() {\n let result = add(5, 3)\n print("Result: \\(result)")\n }\n}\nअब WASM में कंपाइल करें:
\nswift build --triple wasm32-unknown-wasi\nसफल बिल्ड के बाद, फ़ाइल .build/wasm32-unknown-wasi/release/MyWasmApp.wasm दिखाई देगी। इसे wasmtime के माध्यम से चलाएँ:
wasmtime .build/wasm32-unknown-wasi/release/MyWasmApp.wasm\nआपको आउटपुट देखना चाहिए: Result: 8।
4. नेटिव iOS/macOS एप्लिकेशन में WebAssembly का एकीकरण
\nअब सबसे दिलचस्प भाग — iOS पर Swift एप्लिकेशन से WASM फ़ंक्शन को कॉल करना। WasmKit (या WASMInterfaces) लाइब्रेरी का उपयोग करें।
4.1 निर्भरता जोड़ना
\nअपने iOS प्रोजेक्ट के Package.swift में जोड़ें:
dependencies: [\n .package(url: "https://github.com/swiftwasm/WasmKit.git", from: "0.1.0")\n],\ntargets: [\n .target(\n name: "YourApp",\n dependencies: ["WasmKit"]\n )\n]\n4.2 WASM मॉड्यूल लोड करना और कॉल करना
\n.wasm फ़ाइल लोड करने और फ़ंक्शन कॉल करने का उदाहरण कोड:
import WasmKit\n\nfunc callWasmAdd() throws {\n guard let wasmURL = Bundle.main.url(forResource: "MyWasmApp", withExtension: "wasm") else {\n fatalError("WASM file not found")\n }\n let wasmData = try Data(contentsOf: wasmURL)\n let engine = WasmEngine()\n let module = try engine.loadModule(wasmData)\n let instance = try module.instantiate()\n \n // फ़ंक्शन add को कॉल करें\n let result = try instance.exports["add"]?.function?.call([5, 3])\n print("WASM result: \\(result?.first ?? 0)")\n}\nअपने प्रोजेक्ट में .was