कंपाइलर्स अक्सर इंटरमीडिएट प्रस्तुतियों (आईआरएस) का चयन करते हैं जो या तो स्टैक-आधारित या अनंत रजिस्टर होते हैं। इन अभिव्यक्ति पेड़ों पर इन फायदे क्या हैं?स्टैक-आधारित बाइटकोड या अनंत रजिस्टर मशीनों के लाभ
उत्तर
अभिव्यक्ति पेड़ अभिव्यक्तियों के लिए काम करते हैं, लेकिन पूरे कार्यक्रम को मॉडलिंग के लिए प्रभावी नहीं हैं। विशेष रूप से, एक कार्यक्रम का एक अच्छा प्रतिनिधित्व वास्तव में एक ग्राफ (संचालन और कार्यों का) है जो नियंत्रण और डेटा प्रवाह से जुड़ा हुआ है। आम तौर पर लोग "ट्रिपल" का उपयोग करने के बारे में बात करते हैं जो वास्तव में ऐसा ग्राफ बनाते हैं।
स्टैक मशीन कोड सामने के अंत के लिए आसान है, लेकिन असली कोड उत्पन्न करने के लिए आवश्यक अंतिम आवंटन प्रक्रिया के लिए कठिन है, क्योंकि इसमें अस्थायी स्थानों ("स्टैक") का एक सेट है जिसका स्पष्ट रूप से कुछ भी नहीं है लक्ष्य आर्किटेक्चर के साथ, और डेटाफ्लो को प्रक्रिया के लिए असुविधाजनक बनाते हैं। ("कौन सा कोड इस जोड़ के परिणाम का उपयोग करता है?")।
पंजीकरण मशीनें कोड उत्पन्न करने के लिए थोड़ा कठिन हैं, लेकिन उन अनंत रजिस्टरों का उपयोग करके डेटा प्रवाह को अनिवार्य रूप से डेटा प्रवाह तारों के रूप में संरक्षित करते हैं। वह डेटाफ्लो और वास्तविक रजिस्टरों को आसानी से आवंटित करने की क्षमता (ग्राफ रंग द्वारा "मानक पंजीकरण आवंटन" है) यह अच्छा कोड उत्पन्न करने के लिए अपेक्षाकृत आसान बनाता है।
यदि आप इनसे सीधे वर्चुअल मशीन कोड जेनरेट करने का निर्णय लेते हैं, तो आपको विभिन्न प्रदर्शन विशेषताओं मिलती हैं। अनिवार्य रूप से, ढेर मशीनों को छोटे कोड पैरों के निशान मिलते हैं। अनंत पंजीकरण मशीनों को तेजी से व्याख्यात्मक निष्पादन मिलता है। इस कारण से Google की Dalvik JVM से अलग है। (हो सकता है कि वे सन/ओरेकल द्वारा क्लास फ़ाइल स्वरूपों पर भी मुकदमा नहीं करना चाहते थे।)
मैं निम्नलिखित दस्तावेज़ का सुझाव देता हूं: Virtual Machine Showdown: Stack Versus Registers। (पीएस: एक लेखक के रूप में एंटोन Ertl के साथ कुछ भी एक दिलचस्प पढ़ने के लिए जाता है)।
मैं वही जवाब पोस्ट कर रहा था! : डी बीटीडब्लू, मैं यह भी कहूंगा कि स्टैक वीएम शुरू करना आसान है क्योंकि उनके लिए कोड उत्पन्न करना आसान है ... –
मुझे यह निराशाजनक लगता है कि आपका उत्तर स्टैक बनाम रजिस्टर की तुलना करता है, जबकि प्रश्न अभिव्यक्ति पेड़ बनाम स्टैक/रजिस्टर के बारे में पूछता है । –
@romkyns: पर्याप्त मेला। उत्तर संशोधित। –
- 1. Dalvik या जावा वर्चुअल मशीनों पर संदर्भ?
- 2. XOR रजिस्टर, रजिस्टर (कोडांतरक)
- 3. बाइटकोड
- 4. लुआ के बाइटकोड विनिर्देश
- 5. लाभ/नुकसान MemoryStream.Position या MemoryStream.Seek
- 6. क्या लाभ नेट 3.5 या 4
- 7. मानक लुआ बाइटकोड और लुआजिट बाइटकोड
- 8. जावा बाइटकोड
- 9. वर्चुअल मशीनों के लिए सॉफ़्टवेयर ऑप्टिमाइज़ेशन
- 10. अनंत काउंटरों की अनंत सूची
- 11. मशीनों (एसएसएच)
- 12. आभासी मशीनों
- 13. जावा: बाइटकोड
- 14. जावा बाइटकोड
- 15. एएसएम बाइटकोड
- 16. अज्ञात रजिस्टर
- 17. .NET में PHP के अनंत अनंत के बराबर क्या है?
- 18. UITextView अपने प्रतिनिधि के रूप में है अनंत अनंत लूप
- 19. जावा बाइटकोड वाद्ययंत्र के विकल्प
- 20. एसएसई रजिस्टर
- 21. रजिस्टर मार्गों
- 22. रजिस्टर रीसीवर
- 23. एक यूनरी नहीं अभिव्यक्ति के लिए जेवीएम बाइटकोड उत्पन्न करना
- 24. लाभ
- 25. आवेदक प्रोग्रामिंग के लाभ
- 26. अनंत लूप?
- 27. MSTest VS2010 - विभिन्न मशीनों
- 28. गतिशील बाइटकोड उपकरण - समस्या
- 29. असेंबली रजिस्टर शुरुआती
- 30. स्टैक-आधारित आईएल बाइटकोड
एक लाभ मैं सोच सकता हूं कि अभिव्यक्ति पेड़ बाइट्स की श्रृंखला के रूप में प्रतिनिधित्व करने के लिए थोड़ा कठिन है, जबकि एक स्टैक-आधारित वीएम प्रोग्राम एक बाइट स्ट्रीम के लिए स्वाभाविक रूप से अनुवादनीय है। –
@romkyns: एक कंपाइलर आईएल के लिए, यह शायद ही मायने रखता है; आपको केवल इंडेक्स/पॉइंटर्स से जुड़े डेटा संरचनाओं का एक सेट चाहिए। –