वेब असेंबली: Difference between revisions

From Vigyanwiki
m (13 revisions imported from alpha:वेब_असेंबली)
No edit summary
Line 381: Line 381:
{{Web interfaces}}
{{Web interfaces}}
{{JavaScript}}
{{JavaScript}}
[[Category: विधानसभा भाषाएँ]] [[Category: 2015 में कंप्यूटर से संबंधित परिचय]] [[Category: वर्ल्ड वाइड वेब कंसोर्टियम मानक]] [[Category: वेब प्रोग्रामिंग]] [[Category: बाइटकोड]]


 
[[Category:2015 में कंप्यूटर से संबंधित परिचय]]
 
[[Category:All articles containing potentially dated statements]]
[[Category: Machine Translated Page]]
[[Category:Articles containing potentially dated statements from October 2022]]
[[Category:Articles with invalid date parameter in template]]
[[Category:CS1 English-language sources (en)]]
[[Category:Collapse templates]]
[[Category:Created On 18/02/2023]]
[[Category:Created On 18/02/2023]]
[[Category:Vigyan Ready]]
[[Category:Free-content attribution]]
[[Category:Free content from GitHub]]
[[Category:Interwiki link templates| ]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Official website missing URL]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Templates using under-protected Lua modules]]
[[Category:Wikipedia fully protected templates|Sister project links]]
[[Category:Wikipedia metatemplates]]
[[Category:बाइटकोड]]
[[Category:वर्ल्ड वाइड वेब कंसोर्टियम मानक]]
[[Category:विधानसभा भाषाएँ]]
[[Category:वेब प्रोग्रामिंग]]

Revision as of 16:14, 28 February 2023

WebAssembly
WebAssembly Logo.svg
Paradigmstructured; stack machine[1]
द्वारा डिज़ाइन किया गयाW3C
Developer
पहली प्रस्तुतिMarch 2017; 7 years ago (2017-03)
ओएसPlatform independent
लाइसेंसApache License 2.0
फ़ाइल नाम एक्सटेंशनएस
  • .wat (text format)
  • .wasm (binary format)
Influenced by

वेब असेंबली (कभी-कभी संक्षिप्त रूप से वासम) एक सॉफ्टवेयर पोर्टेबिलिटी बाइनरी कोड प्रारूप और निष्पादन योग्य कार्यक्रमों के साथ-साथ ऐसे कार्यक्रमों[2] और उनके होस्ट वातावरण के बीच बातचीत को सुविधाजनक बनाने के लिए सॉफ्टवेयर इंटरफेस के लिए एक संबंधित पाठ प्रारूप को परिभाषित करता है।[3][4][5][6]

वेब असेंबली का मुख्य लक्ष्य वेब पृष्ठों पर उच्च-प्रदर्शन अनुप्रयोगों को सक्षम करना है, किन्तु यह कोई वेब-विशिष्ट धारणा नहीं बनाता है या वेब-विशिष्ट सुविधाएँ प्रदान नहीं करता है, इसलिए इसे अन्य वातावरणों में भी नियोजित किया जा सकता है।[7] यह खुला मानक है[8][9] और किसी भी ऑपरेटिंग प्रणाली पर किसी भी भाषा का समर्थन करने का लक्ष्य रखता है,[10] और व्यवहार में सभी सबसे लोकप्रिय भाषाओं में पहले से ही कम से कम कुछ स्तर का समर्थन है।

2015 में घोषित किया गया और पहली बार मार्च 2017 में जारी किया गया वेब असेंबली 5 दिसंबर 2019 को वर्ल्ड वाइड वेब कंसोर्टियम की सिफारिश बन गया[11][12][13] और इसे 2021 में संगणक तंत्र संस्था सिगप्लान से प्रोग्रामिंग भाषा सॉफ्टवेयर अवार्ड प्राप्त किया था।[14] वर्ल्ड वाइड वेब कंसोर्टियम (W3C) मोजिल्ला, माइक्रोसॉफ्ट, गूगल, एप्पल इंक., फास्टली, इंटेल, और रेड हैट के योगदान से मानक बनाए रखता है।[15][16]


इतिहास

वेब असेंबली का नाम सभा की भाषा की अवधारणा को विकसित करने के लिए रखा गया है, यह शब्द 1950 के दशक का है। यह नाम असेंबली जैसी प्रोग्रामिंग को वर्ल्ड वाइड वेब पर लाने का सुझाव देता है, जहां इसे ग्राहक की ओर निष्पादित किया जाएगा — वेबसाइट उपयोगकर्ता के कंप्यूटर द्वारा उपयोगकर्ता के वेब ब्राउज़र के माध्यम से। इसे पूरा करने के लिए, वेब असेंबली को वास्तविक असेंबली भाषा की तुलना में कहीं अधिक हार्डवेयर-स्वतंत्र होना चाहिए।

वेब असेंबली की घोषणा पहली बार 2015 में की गई थी,[17] और पहला प्रदर्शन फ़ायरफ़ॉक्स में यूनिटी (गेम इंजन) के एंग्री बॉट्स को क्रियान्वित कर रहा था,[18]गूगल क्रोम,[19] और माइक्रोसॉफ्ट बढ़त[20] पूर्ववर्ती प्रौद्योगिकियां मोज़िला और गूगल मूल क्लाइंट से एएसएमडॉटजेएस थीं,[21][22] और प्रारंभिक कार्यान्वयन एएसएमडॉटजेएस के फीचर समूह पर आधारित था।[23] एएसएमडॉटजेएस विधि पहले से ही निकट-देशी कोड निष्पादन गति प्रदान करती है[24][25] और उन ब्राउज़रों के लिए व्यवहार्य विकल्प माना जा सकता है जो वेब असेंबली का समर्थन नहीं करते हैं या सुरक्षा कारणों से इसे अक्षम कर दिया है।

मार्च 2017 में, न्यूनतम व्यवहार्य उत्पाद (एमवीपी) का डिज़ाइन समाप्त होने की घोषणा की गई और पूर्वावलोकन चरण समाप्त हो गया।[26] सितंबर 2017 के अंत में, सफारी (वेब ​​​​ब्राउज़र) को समर्थन के साथ जारी किया गया था। फरवरी 2018 में, वेब असेंबली वर्किंग ग्रुप में कोर स्पेसिफिकेशन, जावास्क्रिप्टइंटरफ़ेस और वेब एपीआई के लिए तीन सार्वजनिक कार्य प्रारूप प्रकाशित किए गये थे।[27][28][29][30]

जून 2019 में, क्रोम 75 को डिफ़ॉल्ट रूप से सक्षम वेब असेंबली थ्रेड्स के साथ जारी किया गया था।[31]

अप्रैल 2022 से, वेब असेंबली 2.0 ड्राफ़्ट स्थिति में है,[32][33] जो कई सिमद-संबंधित निर्देश और नया वी128 डेटाटाइप जोड़ता है, फ़ंक्शन के लिए कई मान वापस करने की क्षमता, और मास मेमोरी इनिशियलाइज़/कॉपी करता है।

कार्यान्वयन

चूंकि वेब असेंबली को प्रारंभ में वेब ब्राउज़र में निकट-देशी कोड निष्पादन गति को सक्षम करने के लिए डिज़ाइन किया गया था, इसे अधिक सामान्यीकृत संदर्भों में इस प्रकार के बाहर मूल्यवान माना गया है।[34][35] चूंकि वेब असेंबली के रनटाइम वातावरण (आरई) निम्न स्तर की स्टैक मशीन (जावा वर्चुअल मशीन या एडोब फ्लैश के समान) हैं, जिन्हें होस्ट अनुप्रयोगों में एम्बेड किया जा सकता है, उनमें से कुछ ने वासमटाइम और वासमर जैसे स्टैंडअलोन रनटाइम वातावरणों का विधि खोज लिया है।[9][10]


वेब ब्राउज़र

नवंबर 2017 में, वेब असेंबली को एज 16 में डिफ़ॉल्ट रूप से सक्षम करने के बाद,[36] मोज़िला ने सभी प्रमुख ब्राउज़रों में समर्थन की घोषणा की थी।[37] इस समर्थन में आईओएस और एंड्रॉयड के लिए मोबाइल वेब ब्राउज़र सम्मिलित हैं। As of October 2022, 96% स्थापित ब्राउज़र वेब असेंबली (संस्करण 1.0) का समर्थन करें।[38] किन्तु पुराने ब्राउज़रों के लिए, वासम को जावास्क्रिप्ट पॉलीफ़िल (प्रोग्रामिंग) द्वारा एएसएमडॉटजेएस में संकलित किया जा सकता है।[39]


संकलक

वेब असेंबली कार्यान्वयन सामान्यतः समय से पहले (एओटी) या समय से पहले संकलन (जेआईटी) संकलन का उपयोग करता है, किन्तु एक दुभाषिया (कंप्यूटिंग) का भी उपयोग कर सकता है। चूंकि पहला कार्यान्वयन वेब ब्राउज़र में आ चुका है, सामान्य प्रयोजन के उपयोग के लिए गैर-ब्राउज़र कार्यान्वयन भी हैं, जिनमें वास्मेर,[10] वासटाइम[40] या डब्ल्यूएएमआर,[16] वाएसएम3, डब्ल्यूएवीएम, और कई अन्य सम्मिलित हैं।[41]

क्योंकि वेब असेंबली के निष्पादन योग्य पहले से संकलित होते हैं, उन्हें बनाने के लिए विभिन्न प्रकार की प्रोग्रामिंग भाषाओं का उपयोग करना संभव है।[42] यह वासम के सीधे संकलन के माध्यम से या वासम में संबंधित वर्चुअल मशीन # प्रोसेस वर्चुअल मशीनों के कार्यान्वयन के माध्यम से प्राप्त किया जाता है। संकलन लक्ष्य के रूप में वासम का समर्थन करने के लिए लगभग 40 प्रोग्रामिंग भाषाओं की सूचना दी गई है।[43]

एमस्क्रिप्टेन बैकएंड के रूप में बाइनरीन और एलएलवीएम का उपयोग करके[26] C (प्रोग्रामिंग भाषा) और C ++ को वास्म में संकलित करता है।[44] एमस्क्रिप्टेन किसी भी एलएलवीएम- समर्थित भाषाओं (जैसे C (प्रोग्रामिंग भाषा), C++ या जंग (प्रोग्रामिंग भाषा), अन्य के बीच) स्रोत कोड को बाइनरी फ़ाइल में संकलित कर सकता है जो उसी सैंडबॉक्स (कंप्यूटर सुरक्षा) में जावास्क्रिप्ट कोड के रूप में चलता है।[note 1] एमस्क्रिप्टेन वेबजीएल जैसे कई सामान्य रूप से उपयोग किए जाने वाले पर्यावरण इंटरफेस के लिए बाइंडिंग प्रदान करता है।

संस्करण 8 के अनुसार, स्टैंडअलोन बजना सी (प्रोग्रामिंग भाषा) और सी ++ को वासम में संकलित कर सकता है।[49]

इसका प्रारंभिक उद्देश्य C (प्रोग्रामिंग भाषा) और C++ से संकलन (कंप्यूटिंग) का समर्थन करना है,[50] चूंकि अन्य स्रोत प्रोग्रामिंग भाषा जैसे रस्ट (प्रोग्रामिंग भाषा), .NET भाषाओं के लिए समर्थन[51][52][43] और असेंबलीस्क्रिप्ट[53] (टाइपप्रति-लाइक) भी उभर रहा है। एमवीपी जारी होने के बाद, थ्रेड (कंप्यूटिंग) #बहु सूत्रण और कचरा संग्रह (कंप्यूटर विज्ञान) का समर्थन करने की योजना है[54][55] जो वेब असेंबली को सी शार्प (प्रोग्रामिंग भाषा) (ब्लेज़र द्वारा समर्थित), F शार्प (प्रोग्रामिंग भाषा) (बोलेरो द्वारा समर्थित) जैसी कचरा एकत्र करने वाली प्रोग्रामिंग भाषाओं के लिए संकलन लक्ष्य बना देगा[56] पायथन (प्रोग्रामिंग भाषा), और यहां तक ​​​​कि जावास्क्रिप्ट की सहायता से जहां ब्राउजर की समय-समय पर संकलन की गति बहुत धीमी मानी जाती है। पायथन (प्रोग्रामिंग भाषा),[57] जूलिया (प्रोग्रामिंग भाषा),[58][59][60] और रूबी (प्रोग्रामिंग भाषा) सहित कई अन्य भाषाओं को कुछ समर्थन प्राप्त है।[61]


सीमाएं

  1. सामान्य तौर पर, वेब असेंबली दस्तावेज़ ऑब्जेक्ट मॉडल के साथ सीधे संपर्क की अनुमति नहीं देता है। सभी इंटरैक्शन जावास्क्रिप्ट इंटरऑप के माध्यम से प्रवाहित होने चाहिए।
  2. कचरा संग्रह की अनुपस्थिति (कंप्यूटर विज्ञान) (चूंकि इसे संबोधित करने की योजना है।)
  3. सुरक्षा विचार (नीचे चर्चा की गई)

वेब असेंबली डेस्कटॉप और मोबाइल पर समर्थित है, किन्तु बाद में, व्यवहार में (गैर-छोटी मेमोरी आवंटन के लिए, जैसे कि यूनिटी (गेम इंजन) गेम इंजन के साथ) गंभीर सीमाएँ हैं जो कई अनुप्रयोगों को मोबाइल पर शक्तिशाली से नियुक्त करने के लिए अक्षम बनाती हैं। ब्राउज़र [..] वर्तमान में क्रोम-विशिष्ट वर्कअराउंड का सहारा लिए बिना एंड्रॉयड पर क्रोम पर ~300MB से अधिक मेमोरी आवंटित करना विश्वसनीय नहीं है, न ही iOS पर सफारी में विश्वसनीय हैं।[62]

कोई प्रत्यक्ष दस्तावेज़ ऑब्जेक्ट मॉडल (डॉम) एक्सेस नहीं है; चूँकि, इसके लिए प्रॉक्सी फ़ंक्शंस बनाना संभव है, उदाहरण के लिए एसटीडीवेब के माध्यम से[63] या वेब_एसवाईएस[64] जंग (प्रोग्रामिंग भाषा) का उपयोग करते समय।

सभी प्रमुख वेब ब्राउज़र वेब असेंबली की अनुमति देते हैं यदि सामग्री-सुरक्षा-नीति निर्दिष्ट नहीं है, या यदि असुरक्षित-ईवल का उपयोग किया जाता है, किन्तु अन्यथा प्रमुख वेब ब्राउज़र अलग व्यवहार करते हैं।[65] व्यावहारिक रूप से वेब असेंबली का उपयोग क्रोम पर असुरक्षित-मूल्यांकन के बिना नहीं किया जा सकता है,[66][67] चूंकि वर्कर थ्रेड वर्कअराउंड उपलब्ध है।[67]



सुरक्षा विचार

जून 2018 में, सुरक्षा शोधकर्ता ने स्पेक्टर (सुरक्षा भेद्यता) और मेल्टडाउन (सुरक्षा भेद्यता) सुरक्षा भेद्यताओं के लिए वेबएसेम्बली का उपयोग करने की संभावना प्रस्तुत की, बार साझा मेमोरी के साथ थ्रेड (कंप्यूटिंग) के लिए समर्थन जोड़ा गया। इस चिंता के कारण, वेब असेंबली विकासकर्ताओं ने इस सुविधा को होल्ड पर रख दिया।[68][69][70] चूँकि, इन भविष्य के भाषा एक्सटेंशन का पता लगाने के लिए, गूगल क्रोम ने अक्टूबर 2018 में वेब असेंबली थ्रेड प्रस्ताव के लिए प्रायोगिक समर्थन जोड़ा।[71]

वेब असेंबली की मैलवेयर लेखकों, स्कैमर्स और फ़िशिंग हमलावरों के लिए सबूत छिपाने में अधिक आसानी की अनुमति देने के लिए आलोचना की गई है; वेब असेंबली केवल अपने संकलित रूप में उपयोगकर्ता की मशीन पर मौजूद है, जो [मैलवेयर बनाता है] का पता लगाना मुश्किल है।[72] वेब असेंबली की गति और छुपाने की क्षमता ने वेबसाइट विज़िटर के डिवाइस पर छिपे हुए क्रिप्टोकुरेंसी खनन में इसका उपयोग किया है।[72][73][68] कॉइनहाइव, वेबसाइट विज़िटर के ब्राउज़रों में क्रिप्टोक्यूरेंसी खनन की सुविधा प्रदान करने वाली अब निष्क्रिय सेवा है, उनका प्रमाणित है कि उनका माइनर वेब असेंबली का उपयोग करता है और देशी माइनर के प्रदर्शन के लगभग 65% के साथ चलता है।[68] टेक्नीश यूनिवर्सिटी ब्राउनश्वेग के जून 2019 के अध्ययन ने एलेक्सा की शीर्ष 1 मिलियन वेबसाइटों में वेब असेंबली के उपयोग का विश्लेषण किया और पाया कि प्रचलित उपयोग दुर्भावनापूर्ण क्रिप्टो खनन के लिए था, और यह मैलवेयर अध्ययन किए गए वेब असेंबली-उपयोग करने वाली वेबसाइटों के आधे से अधिक के लिए जिम्मेदार है।[74][75] यूनिवर्सिटी स्टटगार्ट के अप्रैल 2021 के अध्ययन में पाया गया कि तब से क्रिप्टो खनन को हाशिए पर डाल दिया गया है, जो एलेक्सा की शीर्ष 1 मिलियन वेबसाइटों सहित स्रोतों की विस्तृत श्रृंखला से एकत्र किए गए सभी वेब असेंबली मॉड्यूल के 1% से नीचे गिर गया है।[76]

बड़ी मात्रा में कोड को प्रभावी ढंग से अस्पष्ट करने की क्षमता का उपयोग विज्ञापन अवरोधन और गोपनीयता टूल को अक्षम करने के लिए भी किया जा सकता है जो गोपनीयता बैजर जैसे वेब ट्रैकिंग को रोकते हैं।

जैसा कि वेब असेंबली केवल संरचित नियंत्रण प्रवाह का समर्थन करता है, यह प्रतीकात्मक निष्पादन सहित सुरक्षा सत्यापन विधिों के प्रति उत्तरदायी है।[77] इस दिशा में वर्तमान प्रयासों में मोनिकोर प्रतीकात्मक निष्पादन इंजन सम्मिलित है।[78]


वासी

वेब असेंबली प्रणाली इंटरफ़ेस (वासी) मोज़िला द्वारा डिज़ाइन किया गया सरल इंटरफ़ेस (अनुप्रयोग बाइनरी इंटरफ़ेस और अप्लिकेशन प्रोग्रामिंग अंतरफलक) है, जिसका उद्देश्य किसी भी प्लेटफ़ॉर्म पर पोर्टेबल होना है।[79] यह क्षमता-आधारित सुरक्षा द्वारा विवश फ़ाइल आई/ओ जैसी पोसिक्स जैसी सुविधाएँ प्रदान करता है।[80][81] कुछ अन्य प्रस्तावित एबीआई/एपीआई भी हैं।[82][83]

वासी शिमला मिर्च (यूनिक्स) क्लाउडएबीआई और शिमला मिर्च (यूनिक्स) से प्रभावित है।

डॉकर (सॉफ्टवेयर) के सह-संस्थापक सोलोमन हाइक्स ने 2019 में लिखा, यदि वास्म+वासी 2008 में मौजूद होता, तो हमें डॉकर बनाने की जरूरत नहीं होती। यह कितना महत्वपूर्ण है। सर्वर पर वेब असेंबली कंप्यूटिंग का भविष्य है।[84] वासमर, संस्करण 1.0 में, सॉफ्टवेयर कंटेनरीकरण प्रदान करता है, हम सार्वभौमिक बायनेरिज़ बनाते हैं जो बिना किसी संशोधन के कहीं भी काम करते हैं, जिसमें लिनक्स, मैकओएस, विंडोज और वेब ब्राउज़र जैसे ऑपरेटिंग प्रणाली सम्मिलित हैं। सुरक्षित निष्पादन के लिए डिफ़ॉल्ट रूप से वासम स्वचालित रूप से सैंडबॉक्स करता है।[84]


विशिष्टता

होस्ट पर्यावरण

सामान्य मानक जावास्क्रिप्ट एपीआई के लिए मुख्य विनिर्देश और अंत: स्थापन पर विवरण प्रदान करता है।[5]


वर्चुअल मशीन

वासम कोड (बाइनरी कोड, अर्थात बायटेकोड) को सॉफ्टवेयर पोर्टेबिलिटी वर्चुअल स्टैक मशीन (वीएम) पर चलाने का विचार है।[85] वीएम को जावास्क्रिप्ट की तुलना में तेजी से पार्स और निष्पादित करने और सघन कोड प्रतिनिधित्व करने के लिए डिज़ाइन किया गया है।[50] बाहरी कार्यक्षमता (जैसे प्रणाली कॉल) जो वासम बाइनरी कोड द्वारा अपेक्षित हो सकती है, मानक द्वारा निर्धारित नहीं की जाती है। इसके अतिरिक्त यह होस्ट पर्यावरण द्वारा मॉड्यूल के माध्यम से इंटरफेसिंग प्रदान करने का विधि प्रदान करता है जिसमें वीएम कार्यान्वयन चलता है।[86][9]


वासम कार्यक्रम

वासम प्रोग्राम को अलग मॉड्यूल के रूप में डिज़ाइन किया गया है जिसमें विभिन्न वासम-परिभाषित मूल्यों और प्रोग्राम प्रकार की परिभाषाओं का संग्रह है। ये या तो द्विआधारी या शाब्दिक प्रारूप (नीचे देखें) में व्यक्त किए गए हैं कि दोनों की सामान्य संरचना है।[87]


निर्देश समूह

वासम प्रोग्राम के बाइनरी प्रारूप के लिए मुख्य मानक निर्देश समूह आर्किटेक्चर (आईएसए) को परिभाषित करता है जिसमें वीएम द्वारा निष्पादित विशिष्ट प्रकार के ऑपरेशन सम्मिलित होते हैं (यह निर्दिष्ट किए बिना कि उन्हें कैसे निष्पादित किया जाना चाहिए)।[88] निर्देशों की सूची में मानक मेमोरी लोड / स्टोर निर्देश, संख्यात्मक, पैरामीट्रिक, नियंत्रण प्रवाह निर्देश समूह आर्किटेक्चर और वास-विशिष्ट चर निर्देश सम्मिलित हैं।[89]

मूल मानक (एमवीपी) में उपयोग किए गए ऑपकोड की संख्या 256 संभावित ऑपकोड में से 200 से थोड़ी कम थी। वेब असेंबली के बाद के संस्करणों ने opcodes की संख्या को 200 से थोड़ा अधिक बढ़ा दिया। वेब असेंबली सिमद प्रस्ताव (समानांतर प्रसंस्करण के लिए) 128-बिट कंप्यूटिंग के लिए वैकल्पिक ओपकोड उपसर्ग (ओएक्सऍफ़डी) प्रस्तुत करता है। सिमद उपसर्ग का संयोजन, साथ ही ऑपकोड जो सिमद उपसर्ग के बाद मान्य है, सिमद ऑपकोड बनाता है। सिमद ऑपकोड न्यूनतम व्यवहार्य उत्पाद (एमवीपी) सिमद क्षमता के लिए अतिरिक्त 236 निर्देश लाते हैं (कुल लगभग 436 निर्देशों के लिए)।[90][91] वे निर्देश, अंतिम रूप दिए गए ऑपकोड[92] गूगल के V8 (गूगल क्रोम में) और मोज़िला फ़ायरफ़ॉक्स में संबंधित इंजन में प्रायुक्त किया गया है (किन्तु वेब ब्राउज़र के स्थिर संस्करणों में सक्षम नहीं है),[93] और बाद में सिमद एमवीपी के निर्देशों के लिए कुछ अतिरिक्त प्रस्ताव भी हैं, और टेबल पर अलग रिलैक्स-सिम प्रस्ताव भी है।[94]

ये सिमद ऑपकोड पोर्टेबल भी हैं और x64 और एआरएम जैसे देशी निर्देश समूह में अनुवादित हैं। इसके विपरीत, न तो जावा की जावा बायटेकोड निर्देश सूची (न ही सीआईएल निर्देशों की सूची) सिमद का समर्थन करती है, उनके ऑपकोड स्तर पर, अर्थात मानक में; दोनों में कुछ समांतर एपीआई हैं जो सिम स्पीडअप प्रदान करते हैं। जावा के लिए x64 सिमद के लिए आंतरिक कार्यों को जोड़ने के लिए विस्तार है,[95] वह पोर्टेबल नहीं है, अर्थात एआरएम या स्मार्टफोन पर प्रयोग करने योग्य नहीं है। एसएमडी के साथ असेंबली कोड को कॉल करके स्मार्टफोन सिमड का समर्थन कर सकते हैं, और सी # में समान समर्थन है।

कोड प्रतिनिधित्व

मार्च 2017 में, वेब असेंबली सामुदायिक समूह प्रारंभिक (एमवीपी) बाइनरी प्रारूप, जावास्क्रिप्ट एपीआई और संदर्भ दुभाषिया पर आम सहमति पर पहुंच गया।[96] यह वेब असेंबली बाइनरी प्रारूप (.wasm) को परिभाषित करता है, जिसे मनुष्यों द्वारा उपयोग किए जाने के लिए डिज़ाइन नहीं किया गया है, साथ ही मानव-पठनीय वेब असेंबली पाठ प्रारूप (.wat) जो एस-एक्सप्रेशन और पारंपरिक असेंबली भाषाओं के बीच क्रॉस जैसा दिखता है।

नीचे दी गई तालिका संकलन के बाद C (प्रोग्रामिंग भाषा) और इसके संबंधित वेब असेंबली कोड में लिखे गए फैक्टोरियल फ़ंक्शन का उदाहरण दिखाती है, जो .wat पाठ प्रारूप (वेबअसेंबली का मानव-पठनीय शाब्दिक प्रतिनिधित्व) और .wasm बाइनरी प्रारूप (रॉड बाईटकोड, जिसे नीचे हेक्साडेसिमल में व्यक्त किया गया है) दोनों में दिखाया गया है। जिसे वेब ब्राउज़र या रन-टाइम वातावरण द्वारा निष्पादित किया जाता है जो वेब असेंबली का समर्थन करता है।

सी स्रोत कोड और संबंधित वेब असेंबली
सी स्रोत कोड वेब असेंबली .wat पाठ प्रारूप वेब असेंबली .wasm बाइनरी प्रारूप
int factorial(int n) {
  if (n == 0)
    return 1;
  else
    return n * factorial(n-1);
}
(func (param i64) (result i64)
  local.get 0
  i64.eqz
  if (result i64)
      i64.const 1
  else
      local.get 0
      local.get 0
      i64.const 1
      i64.sub
      call 0
      i64.mul
  end)
00 61 73 6D 01 00 00 00
01 06 01 60 01 7E 01 7E
03 02 01 00
0A 17 01
15 00
20 00
50
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B
0B

सभी पूर्णांक स्थिरांक अंतरिक्ष-कुशल, चर-लंबाई एलईबी128 एन्कोडिंग का उपयोग करके एन्कोड किए गए हैं।[97]

वेब असेंबली पाठ प्रारूप को एस-अभिव्यक्ति का उपयोग करके फोल्ड किए गए प्रारूप में अधिक कैननिक रूप से लिखा गया है। निर्देशों और अभिव्यक्तियों के लिए, यह प्रारूप विशुद्ध रूप से वाक्यात्मक चीनी है और इसमें रैखिक प्रारूप के साथ कोई व्यवहारिक अंतर नहीं है।[98] wasm2wat के माध्यम से, ऊपर दिए गए कोड को विघटित करता है:

(module
  (type $t0 (func (param i64) (result i64)))
  (func $f0 (type $t0) (param $p0 i64) (result i64)
    (if $I0 (result i64) ;; $I0 is an unused label name
      (i64.eqz
        (local.get $p0)) ;; the name $p0 is the same as 0 here
      (then
        (i64.const 1))
      (else
        (i64.mul
          (local.get $p0)
          (call $f0      ;; the name $f0 is the same as 0 here
            (i64.sub
              (local.get $p0)
              (i64.const 1))))))))

ध्यान दें कि मॉड्यूल निहित रूप से संकलक द्वारा उत्पन्न होता है। फ़ंक्शन को वास्तव में बाइनरी में टाइप टेबल की प्रविष्टि द्वारा संदर्भित किया जाता है, इसलिए एक प्रकार का खंड और डिकंपाइलर द्वारा उत्सर्जित type हैं।[99] कंपाइलर और डीकंपलर को ऑनलाइन एक्सेस किया जा सकता है।[100]


टिप्पणियाँ

  1. According to official documentation, the Emscripten SDK may be used to create .wasm files which then may be executed in a web browser.[45][46][47] Even though Emscripten can consume various languages when using Clang, some problems may arise.[48]


यह भी देखें

संदर्भ

  1. "WebAssembly/design/Semantics.md". GitHub (in English). Retrieved 2021-02-23. WebAssembly code can be considered a structured stack machine; a machine where most computations use a stack of values, but control flow is expressed in structured constructs such as blocks, ifs, and loops. In practice, implementations need not maintain an actual value stack, nor actual data structures for control; they need only behave as if they did so.
  2. Mozilla. "Understanding WebAssembly text format". MDN Web Docs. Retrieved 9 December 2019.
  3. "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 18 June 2019. WebAssembly is an open standard...
  4. "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 18 June 2019. WebAssembly is a ... code format
  5. 5.0 5.1 "Conventions — WebAssembly 1.0". webassembly.github.io. Retrieved 17 May 2019. WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure.
  6. "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 18 June 2019. ... this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. These will each define a WebAssembly application programming interface (API) suitable for a given environment.
  7. "Introduction — WebAssembly 1.1". webassembly.github.io. Retrieved 2021-02-19. Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well.
  8. Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 June 2017). "Bringing the Web Up to Speed with WebAssembly". SIGPLAN Notices. 52 (6): 185–200. doi:10.1145/3140587.3062363. ISSN 0362-1340. While the Web is the primary motivation for WebAssembly, nothing in its design depends on the Web or a JavaScript environment. It is an open standard specifically designed for embedding in multiple contexts, and we expect that stand-alone implementations will become available in the future.
  9. 9.0 9.1 9.2 "Outside the web: standalone WebAssembly binaries using Emscripten · V8". v8.dev. Retrieved 2020-07-28.
  10. 10.0 10.1 10.2 "Wasmer - The Universal WebAssembly Runtime". wasmer.io. Retrieved 2021-02-19. Compile everything to WebAssembly. Run it on any OS or embed it into other languages.
  11. World Wide Web Consortium. "WebAssembly Core Specification". World Wide Web Consortium (W3). Retrieved 9 December 2019.
  12. Couriol, Bruno. "WebAssembly 1.0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers". infoq.com. Retrieved 9 December 2019.
  13. "WebAssembly Specification — WebAssembly 1.1". webassembly.github.io. Retrieved 2021-03-22.
  14. "Programming Languages Software Award". www.sigplan.org.
  15. Bright, Peter (18 June 2015). "The Web is getting its bytecode: WebAssembly". Ars Technica. Condé Nast.
  16. 16.0 16.1 "New Bytecode Alliance Brings the Security, Ubiquity, and Interoperability of the Web to the World of Pervasive Computing". Mozilla (in English). 12 November 2019. Retrieved 27 May 2019.
  17. "Launch bug". GitHub / WebAssembly / design. 11 June 2015.
  18. Wagner, Luke (14 March 2016). "A WebAssembly Milestone: Experimental Support in Multiple Browsers". Mozilla Hacks.
  19. Thompson, Seth (15 March 2016). "Experimental support for WebAssembly in V8". V8 Blog.
  20. Zhu, Limin (15 March 2016). "Previewing WebAssembly experiments in Microsoft Edge". Microsoft Edge dev blog.
  21. Lardinois, Frederic (17 June 2015). "Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web". TechCrunch (in English). Retrieved 24 December 2017.
  22. Avram, Abel (31 May 2017). "Google Is to Remove Support for PNaCl". InfoQ. Retrieved 22 December 2017.
  23. "WebAssembly: a binary format for the web". ②ality – JavaScript and more. 18 June 2015.
  24. "Staring at the Sun: Dalvik vs. ASM.js vs. Native". blog.mozilla.org. Retrieved 7 December 2019. Even discarding the one score where asm.js did better, it executes at around 70% of the speed of native C++ code.
  25. Arjun, Jangda, Abhinav Powers, Bobby Berger, Emery Guha (2019-01-25). Not So Fast: Analyzing the Performance of WebAssembly vs. Native Code. OCLC 1106328738.{{cite book}}: CS1 maint: multiple names: authors list (link)
  26. 26.0 26.1 Krill, Paul (6 March 2017). "WebAssembly is now ready for browsers to use". InfoWorld (in English). Retrieved 23 December 2017.
  27. "WebAssembly First Public Working Drafts". W3C. 15 February 2018. Retrieved 20 April 2018.
  28. "WebAssembly Core Specification". W3C. 15 February 2018. Retrieved 20 April 2018.
  29. "WebAssembly JavaScript Interface". W3C. 15 February 2018. Retrieved 20 April 2018.
  30. "WebAssembly Web API". W3C. 15 February 2018. Retrieved 20 April 2018.
  31. "WebAssembly Worker Based Threads - Chrome Platform Status". chromestatus.com. Retrieved 2022-02-19.
  32. "WebAssembly Specification — WebAssembly 2.0 (Draft 2022-09-01)". webassembly.github.io. Retrieved 2022-09-09.
  33. "WebAssembly 2.0 First Public Working Drafts | W3C News" (in English). Retrieved 2022-09-09.
  34. "Non-Web Embeddings". WebAssembly. Retrieved 15 May 2019.
  35. "Non-Web Embeddings". GitHub / WebAssembly. Retrieved 15 May 2019.
  36. "WebAssembly support now shipping in all major browsers". The Mozilla Blog (in English). Retrieved 21 November 2017.
  37. "Introducing new JavaScript optimizations, WebAssembly, SharedArrayBuffer, and Atomics in EdgeHTML 16". Microsoft Edge Dev Blog (in English). 31 October 2017. Retrieved 21 November 2017.
  38. "WebAssembly". Can I use. Retrieved 9 September 2022.
  39. Bright, Peter (18 June 2015). "The Web is getting its bytecode: WebAssembly". Ars Technica (in English). Retrieved 23 December 2017.
  40. "Wasmtime — a small and efficient runtime for WebAssembly & WASI". wasmtime.dev. Retrieved 2020-12-18.
  41. "Roadmap". Retrieved 2021-12-07.
  42. Ball, Kevin (26 June 2018). "How WebAssembly is Accelerating the Future of Web Development". Archived from the original on 12 February 2019. Retrieved 22 October 2018.
  43. 43.0 43.1 "Awesome WebAssembly Languages". GitHub. 26 June 2018. Retrieved 15 February 2022.
  44. Zakai, Alon [@kripken] (21 October 2019). "Emscripten has switched to the upstream LLVM wasm backend by default! / Details:https://groups.google.com/forum/#!topic/emscripten-discuss/NpxVAOirSl4 …" (Tweet). Retrieved 22 October 2019 – via Twitter.
  45. "Developer's Guide - WebAssembly". webassembly.org. Retrieved 10 June 2019.
  46. "Compiling a New C/C++ Module to WebAssembly". MDN Web Docs (in English). Retrieved 10 June 2019.
  47. "Building to WebAssembly — Emscripten 1.38.33 documentation". emscripten.org. Retrieved 10 June 2019.
  48. "Emscripting a C library to Wasm | Web". Google Developers (in English). Retrieved 10 June 2019.
  49. "LLVM 8.0.0 Release Notes — LLVM 8 documentation". releases.llvm.org. Retrieved 22 October 2019.
  50. 50.0 50.1 "WebAssembly High-Level Goals". GitHub / WebAssembly / design. 11 December 2015.
  51. Krill, Paul (29 November 2017). "Direct WebAssembly compilation comes to Rust language". InfoWorld (in English). Retrieved 24 December 2017.
  52. "Frequently asked questions (FAQ) about Blazor". blazor.net. Retrieved 18 June 2018.
  53. AssemblyScript/assemblyscript, The AssemblyScript Project, 2020-09-09, retrieved 2020-09-09
  54. Krill, Paul (26 October 2017). "What's next for WebAssembly: GC, threads, debugging". TechWorld. Retrieved 24 December 2017.
  55. "🛤 Garbage collection · Issue #16 · WebAssembly/proposals". GitHub (in English). Retrieved 25 July 2019.
  56. "Bolero: F# in WebAssembly". fsbolero.io. Retrieved 25 July 2019.
  57. "Pyodide: Bringing the scientific Python stack to the browser – Mozilla Hacks - the Web developer blog". Mozilla Hacks – the Web developer blog (in English). Retrieved 2020-09-09.
  58. "Julia in the Browser". nextjournal.com. Retrieved 9 April 2019.
  59. "WebAssembly platform by tshort · Pull Request #2 · JuliaPackaging/Yggdrasil". GitHub (in English). Retrieved 9 April 2019.
  60. Fischer, Keno (22 July 2019), GitHub - Keno/julia-wasm: Running julia on wasm., retrieved 25 July 2019
  61. "MRuby in Your Browser". ruby.dj. Retrieved 25 July 2019.
  62. "Wasm needs a better memory management story · Issue #1397 · WebAssembly/design". GitHub (in English). Retrieved 2021-02-15.
  63. "stdweb - Rust". docs.rs. Retrieved 5 June 2019. The goal of this crate is to provide Rust bindings to the Web APIs and to allow a high degree of interoperability between Rust and JavaScript.
  64. "web_sys - Rust". docs.rs. Retrieved 5 June 2019. Raw API bindings for Web APIs. This is a procedurally generated crate from browser WebIDL which provides a binding to all APIs that browser provide on the web.
  65. "WebAssembly/content-security-policy". GitHub (in English). Retrieved 2021-02-17.
  66. "948834 - chromium - An open-source project to help move the web forward. - Monorail". bugs.chromium.org. Retrieved 2021-02-17.
  67. 67.0 67.1 "No way to use WebAssembly on Chrome without 'unsafe-eval' · Issue #7 · WebAssembly/content-security-policy". GitHub (in English). Retrieved 2021-02-17.
  68. 68.0 68.1 68.2 Neumann, Robert; Toro, Abel (19 April 2018). "In-browser mining: Coinhive and WebAssembly" (in English). Forcepoint. Retrieved 8 June 2019.
  69. Cimpanu, Catalin (24 June 2018). "Changes in WebAssembly Could Render Meltdown and Spectre Browser Patches Useless" (in English). Bleeping Computer. Retrieved 8 June 2019.
  70. Sanders, James (25 June 2018). "How opaque WebAssembly code could increase the risk of Spectre attacks online". Tech Republic (in English). Retrieved 9 June 2019.
  71. R, Bhagyashree (30 October 2018). "Google Chrome 70 now supports WebAssembly threads to build multi-threaded web applications". Packt Pub. Retrieved 9 June 2019.
  72. 72.0 72.1 Lonkar, Aishwarya; Chandrayan, Siddhesh (October 2018). "The dark side of WebAssembly". Virus Bulletin. Retrieved 8 June 2019.
  73. Segura, Jérôme (29 November 2017). "Persistent drive-by cryptomining coming to a browser near you". Malwarebytes. Retrieved 8 June 2019.
  74. "Recent Study Estimates That 50% of Websites Using WebAssembly Apply It for Malicious Purposes". InfoQ. Retrieved 3 November 2019.
  75. Musch, Marius; Wressnegger, Christian; Johns, Martin; Rieck, Konrad (June 2019). "New Kid on the Web: A Study on the Prevalence of WebAssembly in the Wild". Detection of Intrusions and Malware, and Vulnerability Assessment (PDF). Lecture Notes in Computer Science. Vol. 11543. Detection of Intrusions and Malware, and Vulnerability Assessment. pp. 23–42. doi:10.1007/978-3-030-22038-9_2. ISBN 978-3-030-22037-2. S2CID 184482682. Retrieved 15 February 2022. Slides (PDF)
  76. Aaron Hilbig, Daniel Lehmann, and Michael Pradel (April 2021). "An Empirical Study of Real-World WebAssembly Binaries: Security, Languages, Use Cases." (Archived April 2021) https://software-lab.org/publications/www2021.pdf
  77. Watt, Conrad (2018-01-08). "Mechanising and verifying the WebAssembly specification". Proceedings of the 7th ACM SIGPLAN International Conference on Certified Programs and Proofs. CPP 2018 (in English). Los Angeles CA USA: ACM: 53–65. doi:10.1145/3167082. ISBN 978-1-4503-5586-5. S2CID 9401691.
  78. "Symbolically Executing WebAssembly in Manticore". 31 January 2020. Retrieved 10 February 2020.
  79. "WebAssembly System Interface Repo". GitHub / WebAssembly. 10 February 2020.
  80. "Additional background on Capabilities". GitHub (in English). bytecodealliance. 4 March 2022.
  81. "Standardizing WASI: A system interface to run WebAssembly outside the web – Mozilla Hacks - the Web developer blog". Mozilla Hacks – the Web developer blog.
  82. "reference-sysroot Repo". GitHub / WebAssembly. 12 January 2020.
  83. "wasm-c-api Repo". GitHub / WebAssembly. 3 February 2020.
  84. 84.0 84.1 "The "Wasmer" WebAssembly Runtime is Generally Available". InfoQ (in English). Retrieved 2021-02-19.
  85. "Design Rationale". GitHub / WebAssembly / design. 1 October 2016.
  86. "Portability - WebAssembly". webassembly.org. Retrieved 2020-07-28.
  87. "Conventions — WebAssembly 1.0". webassembly.github.io. Retrieved 12 November 2019.
  88. "Introduction — WebAssembly 1.0". webassembly.github.io. Retrieved 17 May 2019.
  89. "Instructions — WebAssembly 1.0". webassembly.github.io. Retrieved 12 November 2019.
  90. Lively, Thomas (2021-02-19) [Pull Request opened on 2021-02-05]. "Final opcodes by tlively · Pull Request #452 · WebAssembly/simd · GitHub". Bytecode Alliance. Retrieved 2021-05-12 – via GitHub.
  91. Delendik, Yury (2021-02-19) [SIMD changes committed on 2021-02-19]. "File wasm-tools/expr.rs at b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub". Bytecode Alliance. Retrieved 2021-05-12 – via GitHub.
  92. "Update interpreter and text with finalized opcodes by ngzhian · Pull Request #486 · WebAssembly/simd". GitHub (in English). Retrieved 2021-05-14.
  93. "WebAssembly/simd". GitHub (in English). Retrieved 2021-05-14.
  94. WebAssembly/relaxed-simd, WebAssembly, 2021-05-03, retrieved 2021-05-14
  95. "How we made the JVM 40x faster". astojanov.github.io. Retrieved 2021-02-17.
  96. "Roadmap". WebAssembly. March 2017.
  97. WebAssembly Community Group (January 2020). "WebAssembly Specification Release 1.0". Retrieved 13 January 2020.
  98. "Folded instructions". GitHub. / WebAssembly / spec
  99. "Modules (Binary)". WebAssembly 1.0.
  100. "WebAssembly Binary Toolkit (wabt) demos". webassembly.github.io.

Definition of Free Cultural Works logo notext.svg This article incorporates text from a free content work. Licensed under Apache License 2.0 (license statement/permission). Text taken from Text Format, jfbastien; rossberg-chromium; kripken; titzer; s3ththompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; binji; andrewosh, GitHub. WebAssembly/design. To learn how to add open license text to Wikipedia articles, please see this how-to page. For information on reusing text from Wikipedia, please see the terms of use.


बाहरी संबंध