13

कंपाइलर्स अक्सर इंटरमीडिएट प्रस्तुतियों (आईआरएस) का चयन करते हैं जो या तो स्टैक-आधारित या अनंत रजिस्टर होते हैं। इन अभिव्यक्ति पेड़ों पर इन फायदे क्या हैं?स्टैक-आधारित बाइटकोड या अनंत रजिस्टर मशीनों के लाभ

+0

एक लाभ मैं सोच सकता हूं कि अभिव्यक्ति पेड़ बाइट्स की श्रृंखला के रूप में प्रतिनिधित्व करने के लिए थोड़ा कठिन है, जबकि एक स्टैक-आधारित वीएम प्रोग्राम एक बाइट स्ट्रीम के लिए स्वाभाविक रूप से अनुवादनीय है। –

+0

@romkyns: एक कंपाइलर आईएल के लिए, यह शायद ही मायने रखता है; आपको केवल इंडेक्स/पॉइंटर्स से जुड़े डेटा संरचनाओं का एक सेट चाहिए। –

उत्तर

17

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

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

पंजीकरण मशीनें कोड उत्पन्न करने के लिए थोड़ा कठिन हैं, लेकिन उन अनंत रजिस्टरों का उपयोग करके डेटा प्रवाह को अनिवार्य रूप से डेटा प्रवाह तारों के रूप में संरक्षित करते हैं। वह डेटाफ्लो और वास्तविक रजिस्टरों को आसानी से आवंटित करने की क्षमता (ग्राफ रंग द्वारा "मानक पंजीकरण आवंटन" है) यह अच्छा कोड उत्पन्न करने के लिए अपेक्षाकृत आसान बनाता है।

यदि आप इनसे सीधे वर्चुअल मशीन कोड जेनरेट करने का निर्णय लेते हैं, तो आपको विभिन्न प्रदर्शन विशेषताओं मिलती हैं। अनिवार्य रूप से, ढेर मशीनों को छोटे कोड पैरों के निशान मिलते हैं। अनंत पंजीकरण मशीनों को तेजी से व्याख्यात्मक निष्पादन मिलता है। इस कारण से Google की Dalvik JVM से अलग है। (हो सकता है कि वे सन/ओरेकल द्वारा क्लास फ़ाइल स्वरूपों पर भी मुकदमा नहीं करना चाहते थे।)

मैं निम्नलिखित दस्तावेज़ का सुझाव देता हूं: Virtual Machine Showdown: Stack Versus Registers। (पीएस: एक लेखक के रूप में एंटोन Ertl के साथ कुछ भी एक दिलचस्प पढ़ने के लिए जाता है)।

+0

मैं वही जवाब पोस्ट कर रहा था! : डी बीटीडब्लू, मैं यह भी कहूंगा कि स्टैक वीएम शुरू करना आसान है क्योंकि उनके लिए कोड उत्पन्न करना आसान है ... –

+1

मुझे यह निराशाजनक लगता है कि आपका उत्तर स्टैक बनाम रजिस्टर की तुलना करता है, जबकि प्रश्न अभिव्यक्ति पेड़ बनाम स्टैक/रजिस्टर के बारे में पूछता है । –

+0

@romkyns: पर्याप्त मेला। उत्तर संशोधित। –

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