ASM.js क्या है और इसका सभी के लिए क्या मतलब है?


27

मैं ASM.js नामक इस परियोजना के बारे में रूंबिंग सुनना शुरू कर रहा हूं । वर्तमान में उनकी वेब साइट भयानक और भ्रामक है। यहाँ मैं वेब पर अपने शोध से जानता हूँ।

  • यह जावास्क्रिप्ट का एक सबसेट है जिसे अत्यधिक अनुकूलित किया जा सकता है। मैं अनुमान लगा रहा हूं क्योंकि यह भाषा के अधिक गतिशील हिस्सों से बचता है।
  • ASM.js के लिए संकलित कोड का प्रदर्शन सी (प्रकाश नहीं) की लगभग आधी गति से चलता है।
  • इरादा अपनी लक्षित भाषा ASM.js. बनाने के लिए संकलक के लिए है
  • फ़ायरफ़ॉक्स ASM.js ऑप्टिमाइज़ेशन के साथ बेक किया जा रहा है।
  • मोज़िला और अवास्तविक टीमों ने इसके साथ वेब पर अवास्तविक इंजन को पोर्ट किया और इसके पास के देशी गति से फ़ायरफ़ॉक्स के निर्माण में चल रहा है।

यह वास्तव में क्या है या उपयोगिता या अंतिम उद्देश्य के बारे में वेब पर कोई ठोस जानकारी नहीं प्रतीत होती है । क्या ऐसा है कि मैं अपने अन्यथा सर्वर-साइड कोड आधारों को संकलित कर सकता हूं और क्या यह ब्राउजर में क्लोज-टू-नेटिव गति पर चल सकता है? डेवलपर्स के लिए क्या प्रभाव हैं?

जवाबों:


21

आपने पहले ही बताया कि यह क्या है । उपयोग यह है कि यह एक निम्न-स्तरीय भाषा है जो सभी ब्राउज़रों में काम करती है, कुछ में बहुत तेज है और कुछ में बहुत तेज है। आप जो बनाते हैं, वह उतना ही खुला होता है जितना आप किसी अन्य प्रोग्रामिंग भाषा के साथ करते हैं।

मोज़िला का उपयोग मामला सबसे अधिक उत्सुक है। यह पहले से ही एलवीवीएम के माध्यम से जावास्क्रिप्ट में LLVM बैकेंड (सबसे प्रमुख रूप से C और C ++) के साथ भाषाओं के संकलन के तरीके हैं। asm.js, जो पहले से ही उत्सर्जित होता है, के बहुत करीब है, इसलिए यह Emscripten कोड (जो कि आज के जावास्क्रिप्ट JIT कंपाइलर्स पर प्रभावशाली रूप से तेज है) को और भी तेजी से बनने देता है, जिससे मौजूदा कोड बेस को वेब पर पोर्ट करने का लक्ष्य है। फिर, आप वास्तव में इसके लिए क्या उपयोग करते हैं यह आपका निर्णय है। पोर्टिंग गेम एक उपयोग के मामले हैं (जो कि मोज़िला जाहिरा तौर पर सक्रिय रूप से शामिल है), लेकिन सी और सी ++ में अनगिनत चीजें लिखी गई हैं, जिनमें से कुछ किसी की वेब साइट के लिए काम आ सकती हैं। कुछ मैंने देखा है (साथ ही मेरे अपने कुछ भटकते हुए), व्यवहार्यता के बारे में कोई गारंटी नहीं है:

  • एक नया वेब मानक बनाने के लिए और इसे लागू करने के लिए अलग-अलग ब्राउज़रों पर निर्भर करते हुए जावास्क्रिप्ट / वेबसाइटों को और अधिक करने के लिए सामान्य प्रयोजन के एल्गोरिदम (जैसे zlib, libjpeg, Opensl, FFT कार्यान्वयन) को पोर्ट करना।
  • पोर्टिंग दुभाषियों, ताकि जावास्क्रिप्ट के अलावा अन्य भाषाएँ ब्राउज़र में चल सकें, कम ओवरहेड और न्यूनतम पोर्टिंग प्रयास के साथ।
  • अधिक संकलक के लिए बैकएंड के रूप में asm.js का उपयोग करना, विशेष रूप से जो जावास्क्रिप्ट के लिए अच्छी तरह से मैप नहीं करते हैं और इसकी अधिकांश विशेषताओं और ओवरहेड की आवश्यकता नहीं है। एक उदाहरण कोई स्मृति आवंटन के साथ तेजी से संख्यात्मक कार्य के लिए डिज़ाइन की गई भाषा हो सकती है।
  • जावास्क्रिप्ट में JIT बनाने के लिए asm.js का उपयोग करना। यह किसी भी भाषा को लागू कर सकता है - उदाहरण के लिए ActionScript
  • एक ही नस में, मौजूदा जेआईटी संकलक को ब्राउज़र में चलाने के लिए (cf. पोर्टिंग दुभाषियों के साथ, जेएस पर प्रभावी रूप से ओवरहेड) के साथ पोर्ट करना। यह शायद केवल संभव है जब जेआईटी संकलक स्वचालित रूप से उत्पन्न होते हैं, जैसे कि PyPy के साथ।

2
यहाँ एक और अच्छी व्याख्या है: ejohn.org/blog/asmjs-javascript-compile-target
Jarrod Nettles

1
यहाँ एक JIT को asm.js. पर पोर्ट करने के लिए अवधारणा का प्रमाण दिया गया है यह एक अद्वितीय विक्रय बिंदु है, अधिकांश उभरते हुए प्लेटफ़ॉर्म JIT के अनुकूल नहीं हैं।
तोबू

क्या कोई स्पष्टीकरण है कि कैसे asm.js JIT संकलन का समर्थन करता है? उस पर कोई जानकारी नहीं मिल सकती है। सबसे ज्यादा दिलचस्पी यह है कि सुरक्षा के निहितार्थ कैसे संभाले जाते हैं।
रोमन स्टार्कोव

@romkyns JIT संकलन asm.js को ब्राउज़र द्वारा मशीन कोड के लिए, या JIT संकलन को asm.js (जावास्क्रिप्ट प्रोग्राम द्वारा)? पूर्व के लिए, कम से कम फ़ायरफ़ॉक्स में, शुद्ध-जेएस जेआईटी संकलक के मशीन कोड पीढ़ी की सुविधाओं का फिर से उपयोग किया जाता है। चूंकि asm.js केवल JS में कॉल कर सकते हैं, अंकगणित कर सकते हैं, और इंडेक्स-इन-रेंज चेक के साथ एक ढेर सरणी पढ़ / लिख सकते हैं, सुरक्षा JS निष्पादन की सुरक्षा जितनी अच्छी है। उत्तरार्द्ध के लिए, आप बस asm.js स्रोत कोड उत्पन्न करते हैं और ब्राउज़र को इसे निष्पादित करते हैं, और जो मैंने पहले उल्लेख किया है, उसके अतिरिक्त कोई अतिरिक्त सुरक्षा निहितार्थ नहीं हैं।

(मुझे बाद का मतलब था) बेशक; किसी तरह मैंने देशी मशीन कोड का उत्सर्जन करते हुए जेआईटी कंपाइलर की कल्पना की। स्पष्टीकरण के लिए धन्यवाद!
रोमन स्टार्कोव

4

ASM.js की कल्पना एक बड़े बाइनरी ArrayBuffer के रूप में की जाती है, जिसे ढेर और जावास्क्रिप्ट मॉड्यूल का एक सेट कहा जाता है, जो एक प्रस्तावना निर्देश के साथ शुरू होता है: "use asm";और असेंबली भाषाओं के समान कच्चे बाइनरी डेटा पर तेजी से निम्न-स्तरीय संचालन करते हैं। उन मॉड्यूल को हाथ से लिखा जा सकता है या एलमस्क्रिप्ट जैसी लिपियों द्वारा एलएलवीएम कोड से बेहतर संकलित किया जा सकता है। उनके प्रदर्शन को मोज़िला ओडिनमोंकी इंजन के लिए धन्यवाद बढ़ाया जा सकता है, लेकिन वे आधुनिक ECMAScript दुभाषियों में से अधिकांश के साथ पिछड़े-संगत हैं।

ASM.js खेल के लिए ही सीमित नहीं है, तो आप यहां तक कि पूरी क्यूटी आपके ब्राउज़र में एप्लिकेशन, जैसे चला सकते हैं इन !

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