Asm.js और WebAssembly में क्या अंतर है?


101

मैं हाल ही में asm.js और WebAssembly के बारे में पढ़ रहा हूं:

http://ejohn.org/blog/asmjs-javascript-compile-target/

https://brendaneich.com/2015/06/from-asm-js-to-webassembly/

मैं अभी भी कुछ चीजों के बारे में उलझन में हूँ:

  1. क्या asm.js कोड समय और चलाने में संकलित है? क्या में संकलित?
  2. Asm.js के अलावा अन्य टेक्स्ट और wasm (वेब ​​असेंबली) द्विआधारी होने के कारण, 2 के बीच अंतर क्या हैं?
  3. ब्राउज़र में चल रही अन्य स्क्रिप्टिंग भाषाओं के लिए इसका क्या मतलब है? उदाहरण के लिए अजगर को लें, क्या यह होने वाला है
    • अजगर कोड wasm के लिए संकलित? या
    • अजगर दुभाषिया (Cpython) wasm में संकलित और अजगर की व्याख्या?

जवाबों:


47

क्या asm.js कोड समय और चलाने में संकलित है? क्या में संकलित?

asm.js नियमित जावास्क्रिप्ट कोड है, और हमेशा की तरह जेएस दुभाषिया द्वारा बाइटकोड में संकलित किया जाता है। हालाँकि, asm समर्थन के साथ एक दुभाषिया को आगे के संकलन को करने के लिए माना जाता है, और संभवतः स्थैतिक टाइपिंग के कारण अधिक कुशल कोड प्रतिनिधित्व उत्पन्न करने के लिए। देखें http://asmjs.org/ जानकारी के लिए।

asm और wasm (टेक्स्ट बनाम बाइनरी के अलावा) के बीच अंतर क्या हैं?

कोई नहीं, अभी के लिए। wasm को बैकवर्ड-कम्पेटिबल माना जाता है, asm (जो फिर से सामान्य JS के रूप में निष्पादन योग्य है) के लिए अनिवार्य है । हालाँकि इसे भविष्य में और अधिक सुविधाओं के साथ बढ़ाया जा सकता है क्योंकि इसके लिए समर्थन बढ़ता है।

ब्राउज़र में चल रही अन्य स्क्रिप्टिंग भाषाओं के लिए इसका क्या मतलब है?

बाद में, बल्कि, जैसा कि पायथन को अभी भी व्याख्या करने की आवश्यकता है। स्क्रिप्टिंग भाषाओं की ज़रूरत नहीं है जो एक दुभाषिया को सीधे (w) asm में संकलित कर सकती हैं, यह देखते हुए कि एक संकलक (श्रृंखला) है जो इसे लक्ष्य के रूप में समर्थन करता है।


युगल नोट। आपके उत्तर का पहला भाग थोड़ा अस्पष्ट लगता है; ऐसा लगता है कि आप कह रहे हैं कि asm.js AOT को "अधिक कुशल बायोटेक" में संकलित करेगा। वास्तव में, कार्यान्वयन को एक बायोटेक को लक्षित करने की आवश्यकता नहीं होती है, और वास्तव में कई लोग मूल आईएसए को सीधे और एओटी को लक्षित करते हैं (जो कि बिंदु की तरह है, वास्तव में)। आप यह भी कहते हैं "asm और js के लिए संकलन"। आप स्पष्ट करना चाह सकते हैं कि आपका मतलब "मूल विधानसभा" या कुछ और था। या शायद आपका मतलब था "asm.js और js", लेकिन यह बहुत उपयोगी नहीं है क्योंकि एक दूसरे का सबसेट है।
tne

1
@tne: प्रतिक्रिया के लिए धन्यवाद, मुझे आशा है कि मैं मुद्दों को हल कर सकता हूं - बेझिझक (सुझाव) अपने आप को संपादित करें, मैं इसकी सराहना करूंगा। ठीक है, मैं "अधिक कुशल बाइटकोड" पर थोड़ा ढीला था क्योंकि मैं सटीक संकलन वास्तुकला से परिचित नहीं था, आखिरकार आईएसए एक और "बाइट कोड" है जो प्रोसेसर द्वारा व्याख्या की गई है। कृपया गलत शब्दावली को माफ करें :-)
बर्गी

53

asm.js "अत्यधिक अनुकूलन योग्य" निर्देशों के साथ JS का एक सबसेट है। मूल रूप से आप प्रकार (int, float) और js इंजन (ब्राउज़रों में लेकिन नोड एक भी कह सकते हैं) की घोषणा कर सकते हैं। यदि आपके ऐप में बहुत सारे कैलकुलेशन या ग्राफिक हैं तो वेबजीएल के साथ मिलकर उपयोग करने पर इसके लाभ हैं।

वेब असेंबली JS के लिए एक द्विआधारी प्रारूप है, सभी JS, न केवल asm.js. यह बाइटकोड नहीं है, यह एएसटी का एक द्विआधारी एन्कोडिंग है जो पार्सर की गणना करता है। इसके 2 बड़े फायदे हैं:

  • JS इंजन पार्सिंग स्टेप को छोड़ सकता है
  • यह जेएस मूल स्रोत की तुलना में बहुत अधिक कॉम्पैक्ट है

हम पहले से ही उन ब्राउज़रों के लिए कोड लिख सकते हैं जो JS नहीं है: EMSCripten JS कोड में c ++ कोड संकलित कर सकता है। आपके कोड को जेएस में संकलित करने के लिए अन्य ट्रांसपॉन्सर पहले से ही उपलब्ध हैं। जब वह गणित करता है तो asm.js का उपयोग करके कोड तेजी से चल सकता है। वेब असेंबली का उपयोग करने से वह कोड अधिक कॉम्पैक्ट हो जाएगा और ब्राउज़र इसे तेज़ी से संसाधित करने में सक्षम होगा (क्योंकि यह पार्सिंग को छोड़ सकेगा)। आपके पास DirectX, JavaApplets, Flash या Silverlight की तरह लोड करने के लिए एक नया प्लगइन नहीं होगा क्योंकि सब कुछ JS सैंडबॉक्स में चलेगा।


5
पार्सिंग छोड़ें? धीरे करो, वहाँ। हार्डवेयर समर्थन भविष्य के भविष्य के लिए मानचित्र से दूर है। आपका क्या मतलब है कि पार्सिंग asm.js के साथ अड़चन बन गया, और एक कुशल द्विआधारी प्रारूप के साथ wasm फिक्स करता है। Asm.js / wasm के लिए आपका औचित्य थोड़ा न्यूनतर लगता है, लेकिन यह ठीक है। बाइटकोड को इंगित करने के लिए सहारा! = AST।
tn

4
@ क्रिसियन, WASM JS के लिए कोई बाइनरी फॉर्मेट नहीं है। यह JS के समान ही वेब API का उपयोग करेगा, लेकिन यह JS की तुलना में बहुत अधिक पोर्टेबल और सामान्यीकृत है। JS, या bytecodes के लिए केवल द्विआधारी प्रारूप, वे हैं जो ब्राउज़रों में कार्यान्वित किए जाते हैं, जैसे फ़ायरफ़ॉक्स का यहाँ: developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/…
LearningFast

20

क्या asm.js कोड समय और चलाने में संकलित है? क्या में संकलित?

विभिन्न ब्राउज़र विभिन्न तरीकों से asm.js कोड संकलित करते हैं। अगस्त 2015 तक:

  • फ़ायरफ़ॉक्स asm.js को मशीन कोड के लिए संकलित करता है (और समान asm.js के भविष्य के भार के लिए मशीन कोड को कैश करता है) [ 1 ]।
  • विंडोज 10 में एक प्रायोगिक ध्वज के रूप में, एज asm.js [ 2 ] का कुछ आगे-पीछे सत्यापन और संकलन भी करेगा ।
  • क्रोम विशेष रूप से asm.js की शुरुआत में पार्स करने के लिए "यूज़ एएसएम" निर्देश को पहचानता है और इसे कोड का और अधिक उत्सुकता से विश्लेषण करता है और संकलन उत्तराधिकारियों को ट्वीक करता है।
  • सफारी का कोई विशेष प्रसंस्करण नहीं है।

Asm.js के अलावा अन्य टेक्स्ट और wasm (वेब ​​असेंबली) द्विआधारी होने के कारण, 2 के बीच अंतर क्या हैं?

asm.js सिर्फ जावास्क्रिप्ट है और इस प्रकार जावास्क्रिप्ट कल्पना के अनुसार बिल्कुल व्यवहार करना चाहिए। एक नए मानक के रूप में, WebAssembly कुछ कोने के मामलों को ठीक करने में सक्षम है जहां जावास्क्रिप्ट व्यवहार आदर्श नहीं है (प्रदर्शन या संकलन के दृष्टिकोण से) [ 3 ]। भविष्य में [ 4 ], WebAssembly उन सुविधाओं को जोड़ने में सक्षम होगा जो अन्यथा जावास्क्रिप्ट में व्यक्त करना मुश्किल होगा।

ब्राउज़र में चल रही अन्य स्क्रिप्टिंग भाषाओं के लिए इसका क्या मतलब है? उदाहरण के लिए अजगर को लें, क्या यह होने वाला है

  • अजगर कोड wasm के लिए संकलित? या
  • अजगर दुभाषिया (Cpython) wasm में संकलित और अजगर की व्याख्या?

V.1 में, एक ब्राउज़र में पायथन को चलाने का सबसे सरल तरीका, जैसा कि आपने कहा, वह पायथन इंटरप्रेटर को wasm पर संकलित करना होगा। इसका मतलब है, उदाहरण के लिए, पायथन जीसी wasm कोड में चल रहा है और मैन्युअल रूप से wasm रैखिक मेमोरी का प्रबंधन कर रहा है। PyPy [ 5 ] के लिए एक asm.js बैकएंड को जोड़ने के लिए पहले से ही एक प्रायोगिक परियोजनाएं रही हैं (जो कि बस wasm के लिए काम कर सकती थीं)। यह वर्तमान में asm.js की सीमाओं में चलता है जो कि wasm की गतिशील लिंकिंग भविष्य की विशेषता द्वारा संबोधित किया जा सकता है । आगे जाकर, वह दोनों जीसी एकीकरण और जेआईटी संकलन समर्थन दोनों प्रदान करना चाहता है, जो वेब प्लेटफॉर्म के साथ अधिक कुशल और प्राकृतिक एकीकरण की अनुमति देगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.