2009-05-20 10 views

उत्तर

33

लगभग कोई दुभाषिया वास्तव में कोड सीधे, रेखा से लाइन का अर्थ देता है - यह बस बहुत अक्षम है। लगभग सभी दुभाषिया कुछ मध्यवर्ती प्रतिनिधित्व का उपयोग करते हैं जिन्हें आसानी से निष्पादित किया जा सकता है। इसके अलावा, इस इंटरमीडिएट कोड पर छोटे अनुकूलन किए जा सकते हैं।

पायथन आगे इस कोड को स्टोर करता है जिस पर अगली बार इस कोड को निष्पादित करने के लिए एक बड़ा फायदा होता है: पायथन को अब कोड को पार्स नहीं करना पड़ता है; पार्सिंग संकलन प्रक्रिया में सबसे धीमा हिस्सा है। इस प्रकार, एक बाइटकोड प्रतिनिधित्व निष्पादन ओवरहेड काफी हद तक कम कर देता है।

+1

यहां तक ​​कि मेरे टीआरएस -80 पर पुराने एमएस बेसिक ने एक बहुत ही सरल एन्कोडिंग योजना का उपयोग किया: जैसे ही मैंने एक पंक्ति टाइप या संपादित की, बेसिक कीवर्ड एकल बाइट्स में ध्वस्त हो गए। –

+1

@ डेविड थॉर्नले: कई 1 9 80 के कंप्यूटरों ने एमएस-बेसिक के व्युत्पन्न का उपयोग किया जो कीवर्ड को टोकन में परिवर्तित करता था, लेकिन संख्यात्मक रूप से संख्याओं और परिवर्तनीय नामों को रखा जाता था, इस प्रकार उनके मूल्यों की गणना करने या रनटाइम पर उन्हें देखने के लिए। अटारी बेसिक ने अधिक प्रसंस्करण किया, चर की एक तालिका का निर्माण किया और उनके नामों को इंडेक्स के साथ बदल दिया। इसने संख्यात्मक संख्या को बीसीडी फ्लोटिंग-पॉइंट नंबरों में भी परिवर्तित कर दिया। केवल स्ट्रिंग अक्षर और टिप्पणियां टेक्स्ट के रूप में संग्रहित की गई थीं। ऐसी चीजों ने अटारी बेसिक को दूसरों से बेहतर प्रदर्शन करने की इजाजत दी हो सकती है, सिवाय इसके कि प्रत्येक पंक्ति का नंबर बाइनरी के रूप में संग्रहीत किया गया था, लेकिन गोटो लक्ष्य ... – supercat

+1

... बीसीडी फ्लोटिंग-पॉइंट के रूप में संग्रहीत किया गया था, इसलिए प्रत्येक गोटो को बीसीडी-टू-बाइनरी रूपांतरण की आवश्यकता होती है । फिर भी, यह दिलचस्प है कि अटारी बेसिक के लेखक ने टोकन के साथ कीवर्ड को बदलने की बजाए प्रोग्राम को एक विश्लेषण में परिवर्तित कर दिया। – supercat

7

क्योंकि बाइटकोड से सीधे व्याख्या करना तेज है। यह एक चीज़ के लिए, lexing करने की जरूरत से परहेज करता है।

8

क्योंकि आप एक बार .pyc संकलित कर सकते हैं और कई बार इसकी व्याख्या कर सकते हैं।

तो यदि आप कई बार एक स्क्रिप्ट चला रहे हैं तो आपके पास केवल एक बार स्रोत कोड को पार्स करने का ओवरहेड होगा।

6

इसे बार-बार करने के बजाए स्रोत कोड को फिर से लेना और पार्स करना, (अक्सर अक्सर import पर), निश्चित रूप से प्रयासों का एक मूर्ख और व्यर्थ अपशिष्ट होगा।

+0

बस एक ".py" फ़ाइल चलाना परिणामस्वरूप स्रोत कोड को फिर से लेक्सिंग और पार्सिंग कर रहा है, है ना? अगर फ़ाइल बड़ी है, तो यह एक महत्वपूर्ण ओवरहेड हो सकता है। मुझे यकीन नहीं है कि क्यों आयात विशेष उपचार प्राप्त करता है। मैं वास्तव में समझने में किसी भी मदद की सराहना करता हूं। – batbrat

-1

मुझे बहुत संदेह है कि कारण प्रदर्शन है, यद्यपि यह एक अच्छा साइड इफेक्ट है। मैं कहूंगा कि यह सोचना स्वाभाविक है कि कुछ उच्च स्तरीय असेंबली भाषा के आसपास बनाया गया वीएम कुछ स्रोत कोड स्ट्रिंग में टेक्स्ट ढूंढने और बदलने की तुलना में अधिक व्यावहारिक होगा।

संपादित करें:

ठीक है, स्पष्ट रूप से, जो कभी समझाने के लिए एक उचित टिप्पणी छोड़ने के बिना मेरे पोस्ट पर एक -1 वोट डाल आभासी मशीनों (रन-टाइम वातावरण) के बारे में बहुत कम जानता है।

http://channel9.msdn.com/shows/Going+Deep/Expert-to-Expert-Erik-Meijer-and-Lars-Bak-Inside-V8-A-Javascript-Virtual-Machine/

+1

मैंने -1 नहीं किया, लेकिन मैं ईमानदार होगा कि मैं आपके बिंदु को समझ नहीं पाया, विशेष रूप से इसका यह हिस्सा: "कुछ स्रोत कोड स्ट्रिंग में टेक्स्ट ढूंढने और बदलने की तुलना में अधिक व्यावहारिक होगा" –

+0

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

+0

बाइट-कोड एएसटी का एक अधिक प्रभावशाली कॉम्पैक्ट और व्यावहारिक प्रतिनिधित्व है। –

2

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

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