2009-07-20 9 views
9

मुझे पता है कि Google की v8 मूल मशीन में जावास्क्रिप्ट संकलित करता है (बाइनरी अगर मैं सही ढंग से समझता हूं) कोड।
क्या आउटपुट लेने और इसे exe में बदलने का कोई तरीका है?वी 8 संकलित जावास्क्रिप्ट को EXE में कैसे चालू करें?

उत्तर

7

मुझे नहीं लगता कि आप सीधे जावास्क्रिप्ट का एक टुकड़ा वी 8 का उपयोग करके निष्पादन योग्य में बदल सकते हैं, लेकिन आप शायद एक ऐसा एप्लिकेशन बना सकते हैं जो जावास्क्रिप्ट के साथ वी 8 इंजन को बंडल करता है और इसे स्टैंड-अलोन के रूप में चलाता है।

आप its project page पर वी 8 के बारे में सभी जानकारी पा सकते हैं।

यह भी ध्यान रखें कि जावास्क्रिप्ट पूरी तरह से संकलित नहीं किया जा सकता क्योंकि यह गतिशील भाषा है। वी 8 के साथ, यह जेआईटी-संकलित है (उदाहरण के लिए .NET की तरह।) यह अभी भी स्टैंडअलोन निष्पादन योग्य में बदलना संभव है (उदाहरण के लिए .NET, उदाहरण के लिए।)

यदि आप स्टैंड-अलोन विकसित करना चाहते हैं एप्लिकेशन जो प्रतिपादन के लिए HTML का उपयोग करते हैं, आप Adobe Air पर भी देख सकते हैं।

+0

मैं कुछ और करने की कोशिश कर रहा हूं। आप जावास्क्रिप्ट को exe में कैसे बंडल कर सकते हैं? –

+0

वी 8 प्रोजेक्ट पेज के "एम्बेडिंग" भाग को देखें। – Blixt

+0

आप नोड-वेबकिट प्रोजेक्ट का उपयोग करके .exe में बहुत आसानी से जावास्क्रिप्ट को बंडल कर सकते हैं - https: // github।com/rogerwang/node-webkit – denysonique

6

जावास्क्रिप्ट को एक बार संकलित नहीं किया जा सकता है। भाषा में eval है जो व्यापक रूप से उपयोग किया जाता है। (उदाहरण के लिए जेएसओएन के लिए) आपको जेआईटी, और पूरे रनटाइम को ले जाने की जरूरत है।

यहां जेआईटी केवल एक अनुकूलन है, संकलक/दुभाषिया से छुटकारा पाने का तरीका नहीं है।

+2

"वी 8 पहली बार निष्पादित होने पर जावास्क्रिप्ट स्रोत कोड को मशीन कोड में संकलित करता है। कोई इंटरमीडिएट बाइट कोड नहीं है, कोई दुभाषिया नहीं है। संपत्ति का उपयोग इनलाइन कैश कोड द्वारा संभाला जाता है जिसे अन्य मशीन निर्देशों के साथ जोड़ा जा सकता है वी 8 निष्पादित करता है। " –

+3

हाँ, लेकिन "जब इसे पहली बार निष्पादित किया गया" भाग पर ध्यान दें। जावास्क्रिप्ट को पूरी तरह से बाइट-कोड में संकलित नहीं किया जा सकता है, इसकी गतिशील प्रकृति के कारण इसे संकलित किया जाना चाहिए। – Blixt

+5

@the_drow: समस्या यह है कि 'eval' के साथ आप हर समय नया जावास्क्रिप्ट कोड खिलाते हैं। – EFraim

3

Node.js वी 8 एम्बेड करता है। यह सीखने के लिए एक अच्छा उदाहरण हो सकता है।

3

देशी कोड में जेएस बनाने में कुछ कोशिशें हुई हैं, यह ऐसा कुछ नहीं है जिसका उत्पादन किसी भी माध्यम से, अकादमिक हित में अधिक हो सकता है। जावा के लिए राइनो दुभाषिया में जेएस को (जावा) बाइटकोड बनाने का विकल्प है, इसलिए एक दृष्टिकोण बाइटकोड में परिवर्तित करना है और फिर बाइटकोड से जीसीजे के साथ मूल में जाना है। राइनो और जीसीजे के बारे में कुछ चर्चा है लेकिन मुझे नहीं पता कि किसी ने कभी भी यह कोशिश की है या नहीं। https://groups.google.com/forum/#!msg/netscape.public.mozilla.jseng/c3tqyLZ19fw/8V4HeuMtIXUJ

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

http://mozakai.blogspot.com/2010/07/experiments-with-static-javascript-as.html

तो एक exe फ़ाइल वास्तव में महत्वपूर्ण है, मैं अपने अनुप्रयोग के साथ वी 8 बंडल भले ही जब से तुम निवासी js संकलन कर सकते हैं, आप अभी भी एक पूर्ण दुभाषिए की जरूरत है, तो आप किसी भी eval() या इसी तरह का उपयोग । जब तक आपके उपयोगकर्ता किसी 8 एमबी exe या 8MB V8.dll फ़ाइल को ध्यान में रखते हैं, तब तक किसी भी .exe फ़ाइल में सबकुछ बंडल करने के लिए कोई टूल लिखना मुश्किल नहीं होगा।

आखिरी विचार के रूप में, बिग जी ने क्रोम (google: "क्रोम पैक किए गए ऐप्स") के आधार पर "मूल" ऐप्स को अनुमति देना शुरू कर दिया है। उनके पास निम्न स्तर की सिस्टम पहुंच है और आप वेबकिट रेंडरर का उपयोग कर सकते हैं जो आपको सीएसएस और एचटीएमएल में अपना जीयूआई बनाने की इजाजत देता है और उनके पास अपनी खिड़कियां और आइकन हैं, इसलिए यह स्पष्ट नहीं है कि वे क्रोम के अंदर चल रहे हैं। यह शायद अभी भी समयपूर्व है लेकिन डेस्कटॉप एप्लिकेशन फ़ील्ड में नजर रखने के लिए यह कुछ है।

संबंधित मुद्दे