WebAssembly - कार्यक्रम संरचना
WebAssembly, जिसे WASM भी कहा जाता है, द्विआधारी प्रारूप निम्न स्तर का कोड है जो ब्राउज़रों के अंदर सबसे कुशल तरीके से निष्पादित किया जाता है। WebAssembly कोड निम्नलिखित अवधारणाओं के साथ संरचित है -
- Values
- Types
- Instructions
आइए अब हम उन्हें विस्तार से जानें।
मूल्यों
WebAssembly में मान जटिल डेटा जैसे टेक्स्ट, स्ट्रिंग्स और वैक्टर को संग्रहीत करने के लिए हैं। WebAssembly निम्नलिखित का समर्थन करता है -
- Bytes
- Integers
- तैरनेवाला स्थल
- Names
बाइट्स
बाइट्स WebAssembly में समर्थित मूल्यों का सबसे सरल रूप है। मान हेक्साडेसिमल प्रारूप में है।
For exampleबाइट्स को b के रूप में दर्शाया गया , प्राकृतिक संख्या n भी ले सकते हैं, जहाँ n <256।
byte ::= 0x00| .... |0xFF
पूर्णांकों
WebAssembly में, पूर्णांक समर्थित समर्थन नीचे दिए गए हैं -
- i32: 32-बिट पूर्णांक
- i64: 64-बिट पूर्णांक
तैरनेवाला स्थल
WebAssembly में फ्लोटिंग पॉइंट संख्या समर्थित हैं जो निम्नानुसार हैं -
- f32: 32-बिट फ्लोटिंग पॉइंट
- f64: 64-बिट फ्लोटिंग पॉइंट
नाम
नाम चरित्र के अनुक्रम हैं, यूनिकोड द्वारा परिभाषित स्केलर मानों के साथ, जो लिंक पर उपलब्ध है http://www.unicode.org/versions/Unicode12.1.0/ इसके साथ।
प्रकार
WebAssembly में संस्थाओं को वर्गीकृत किया गया है। समर्थित प्रकार निम्नानुसार हैं -
- मान प्रकार
- परिणाम प्रकार
- समारोह के प्रकार
- Limits
- मेमोरी प्रकार
- तालिका प्रकार
- वैश्विक प्रकार
- बाहरी प्रकार
आइए हम एक-एक करके उनका अध्ययन करें।
मान प्रकार
WebAssembly द्वारा समर्थित मान निम्न प्रकार हैं -
- i32: 32-बिट पूर्णांक
- i64: 64-बिट पूर्णांक
- f32: 32-बिट फ्लोटिंग पॉइंट
- f64: 64-बिट फ्लोटिंग पॉइंट
valtype ::= i32|i64|f32|f64
परिणाम प्रकार
कोष्ठक के अंदर लिखे गए मानों को निष्पादित किया जाता है और परिणाम प्रकारों के अंदर संग्रहीत किया जाता है। परिणाम प्रकार मानों से बने कोड के ब्लॉक के निष्पादन का आउटपुट है।
resulttype::=[valtype?]
समारोह के प्रकार
एक फ़ंक्शन प्रकार मापदंडों के वेक्टर में ले जाएगा परिणामों का एक वेक्टर लौटाता है।
functype::=[vec(valtype)]--> [vec(valtype)]
सीमाएं
सीमाएं मेमोरी और टेबल प्रकारों के साथ जुड़ी हुई स्टोरेज रेंज हैं।
limits ::= {min u32, max u32}
मेमोरी प्रकार
मेमोरी प्रकार रैखिक यादें और आकार सीमा के साथ सौदा करते हैं।
memtype ::= limits
तालिका प्रकार
तालिका प्रकार को इसके द्वारा निर्दिष्ट तत्व प्रकार द्वारा वर्गीकृत किया गया है।
tabletype ::= limits elemtype
elemtype ::= funcref
तालिका प्रकार उसके लिए निर्दिष्ट न्यूनतम और अधिकतम आकार की सीमा पर निर्भर है।
वैश्विक प्रकार
ग्लोबल टाइप में ग्लोबल वैरिएबल होते हैं जिनकी वैल्यू होती है, जो बदल सकते हैं या वही रह सकते हैं।
globaltype ::= mut valtype
mut ::= const|var
बाहरी प्रकार
बाहरी प्रकार आयात और बाहरी मूल्यों से संबंधित है।
externtype ::= func functype | table tabletype | mem memtype | global globaltype
अनुदेश
WebAssembly कोड निर्देशों का एक अनुक्रम है जो स्टैक मशीन मॉडल का अनुसरण करता है। जैसा कि WebAssembly एक स्टैक मशीन मॉडल का अनुसरण करता है, निर्देश स्टैक पर धकेल दिए जाते हैं।
फ़ंक्शन के लिए तर्क मान, उदाहरण के लिए, स्टैक से पॉप किए जाते हैं और परिणाम स्टैक पर वापस धकेल दिया जाता है। अंत में, स्टैक में केवल एक मान होगा और वह परिणाम है।
आमतौर पर उपयोग किए जाने वाले कुछ निर्देश इस प्रकार हैं -
- संख्यात्मक निर्देश
- चर निर्देश
संख्यात्मक निर्देश
संख्यात्मक निर्देश संचालन होते हैं, जो संख्यात्मक मान पर किए जाते हैं।
For examplenn, mm ::= 32|64
ibinop ::= add|sub|mul|div_sx|rem_sx|and|or|xor
irelop ::= eq | ne | lt_sx | gt_sx | le_sx | ge_sx
frelop ::= eq | ne | lt | gt | le | ge
चर निर्देश
परिवर्तनीय निर्देश स्थानीय और वैश्विक चर तक पहुँचने के बारे में हैं।
For example
स्थानीय चर तक पहुँचने के लिए -
get_local $a
get_local $b
सेवा set स्थानीय चर -
set_local $a
set_local $b
सेवा access वैश्विक चर -
get_global $a
get_global $b
सेवा set वैश्विक चर -
set_global $a
set_global $b