2012-07-11 14 views
11

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

  • समय की वाक्य रचना पेड़ सैकड़ों Traversing एक सरणी निर्देश चलाने की तुलना में धीमी हो सकती है, खासकर सरणी समर्थन हे (1) रैंडम एक्सेस करता है, तो (यानी:

    के लिए अब मेरे मन में तीन बातें हैं। 10 निर्देश ऊपर और नीचे कूदना)।

  • टाइप किए गए निष्पादन वातावरण में, मेरे पास कुछ रन-टाइम लागतें हैं क्योंकि मेरा एएसटी टाइप किया गया है, और मैं लगातार इसे घुमा रहा हूं (यानी मेरे पास 10 प्रकार के नोड्स हैं और मुझे यह जांचने की ज़रूरत है कि मैं अब किस प्रकार का हूं निष्पादित)। हो सकता है कि एक untyped बाइट कोड को संकलित करने में मदद करने में मदद मिल सकती है, क्योंकि टाइप-चेकिंग और संकलन के बाद, मेरे पास एक untyped मान और कोड होगा।
  • बाइट-कोड से संकलन बेहतर पोर्टेबिलिटी प्रदान कर सकता है।

क्या मेरे अंक सही हैं? बाइटकोड को संकलित करने के पीछे कुछ अन्य प्रेरणा क्या हैं?

+0

एक व्याख्याकर्ता पर चलकर यह आपके कोड – Luis

+0

@Luis की पोर्टेबिलिटी बढ़ाता है, हाँ यह पहले से ही मेरे दिमाग में था, मैं जोड़ना भूल गया .. – sinan

+0

@Luis: यह फर्जी है। सीरियलाइज्ड एएसटी समान पोर्टेबल बनाया जा सकता है। बाइटकोड वास्तव में पोर्टेबल नहीं हो सकता है; पायथन बाइटकोड दुभाषिया के प्रत्येक संस्करण के लिए विशिष्ट है। –

उत्तर

5

गति मुख्य कारण है; एएसटी की व्याख्या करना अभ्यास में बहुत धीमा है।

बाइटकोड का उपयोग करने का एक अन्य कारण यह है कि इसे त्रिभुज रूप से धारावाहिक (डिस्क पर संग्रहीत) किया जा सकता है, ताकि आप इसे वितरित कर सकें। जावा यही करता है।

+0

हम्म, तो यह मूल रूप से यह है। मैं कुछ और दिलचस्प प्रेरणा खोजने की उम्मीद कर रहा था। – sinan

+0

"जावा यही करता है"। अजगर नहीं है? –

6

बाइट कोड उत्पन्न करने का बिंदु (या किसी भी अन्य "आसानी से व्याख्या किए गए" फॉर्म जैसे थ्रेडेड कोड) अनिवार्य रूप से प्रदर्शन है।

एक एएसटी इंटिप्टर के लिए यह तय करने के लिए कि आगे क्या करना है, इसे पेड़ को पार करने, नोड्स का निरीक्षण करने, नोड्स के प्रकार का निर्धारण करने, किसी भी ऑपरेशन के प्रकार की जांच करने, वैधता की पुष्टि करने और एएसटी- नामित ऑपरेटर लागू होता है (यह कहता है "+", लेकिन इसका मतलब है कि 16 बिट ऐड या स्ट्रिंग कॉन्सटेनेट?), इससे पहले कि यह अंततः कुछ क्रिया करता है।

यदि कोई अंतिम कार्यवाही करता है और किसी प्रकार की आसानी से व्याख्या की गई संरचना उत्पन्न करता है, तो "निष्पादन" समय पर दुभाषिया केवल जांच/विशेष-मामले निर्धारण के बिना निष्पादन कार्यों पर ध्यान केंद्रित कर सकता है।

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

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