मैंने वेब पर मेटा-परिपत्र दुभाषियों के बारे में पढ़ा है (SICP सहित) और मैंने कुछ कार्यान्वयनों (जैसे PyPy और Narcissus) के कोड में देखा है।
मैंने दो भाषाओं के बारे में काफी कुछ पढ़ा है, जो मेटासेकुलर मूल्यांकन, लिस्प और स्मॉलटाक के महान उपयोग किए हैं। जहां तक मुझे समझ में आया कि लिस्प पहला सेल्फ-होस्टिंग कंपाइलर था और स्मॉलटाक का पहला "सच" जेआईटी कार्यान्वयन था।
एक बात जो मुझे पूरी तरह से समझ में नहीं आई है, वह यह है कि उन दुभाषियों / संकलक इतने अच्छे प्रदर्शन को कैसे प्राप्त कर सकते हैं या, दूसरे शब्दों में, PyPy CPython से अधिक तेज़ क्यों है? क्या यह प्रतिबिंब के कारण है?
और साथ ही, मेरे स्मॉलटाक अनुसंधान ने मुझे विश्वास दिलाया कि जेआईटी, आभासी मशीनों और प्रतिबिंब के बीच एक संबंध है। जेवीएम और सीएलआर जैसी वर्चुअल मशीनें बहुत अधिक प्रकार के आत्मनिरीक्षण की अनुमति देती हैं और मेरा मानना है कि वे जस्ट-इन-टाइम (और एओटी, मुझे लगता है?) संकलन का बहुत उपयोग करते हैं। लेकिन जहाँ तक मुझे पता है, वर्चुअल मशीनें सीपीयू की तरह हैं, इसमें उनके पास एक बुनियादी निर्देश सेट है। क्या वर्चुअल मशीनें कुशल हैं क्योंकि वे प्रकार और संदर्भ जानकारी शामिल हैं, जो भाषा-अज्ञेय प्रतिबिंब की अनुमति देगा?
मैं यह पूछता हूं क्योंकि व्याख्या की गई और संकलित दोनों भाषाएं अब एक लक्ष्य (LLVM, तोता, YARV, CPython) और JVM और CLR जैसे पारंपरिक VMs ने प्रदर्शन में अविश्वसनीय वृद्धि प्राप्त की है। मुझे बताया गया है कि यह जेआईटी के बारे में है, लेकिन जहां तक मुझे पता है कि जेआईटी कोई नई बात नहीं है क्योंकि स्मॉलटाक और सन की खुद की जावा से पहले यह स्वयं कर रहा है। मुझे याद नहीं है कि वीएम अतीत में विशेष रूप से अच्छा प्रदर्शन करते थे, जेवीएम और .NET के बाहर बहुत सारे गैर-शैक्षणिक व्यक्ति नहीं थे और उनका प्रदर्शन निश्चित रूप से उतना अच्छा नहीं था जितना कि अब है (काश मैं इस दावे का स्रोत बन पाता लेकिन व्यक्तिगत अनुभव से बात)।
फिर अचानक 2000 के दशक के अंत में कुछ बदल गया और बहुत सारी VMs स्थापित भाषाओं के लिए भी पॉप अप करने लगीं, और बहुत अच्छे प्रदर्शन के साथ। क्या JIT कार्यान्वयन के बारे में कुछ पता चला था जिसने हर आधुनिक वीएम को प्रदर्शन में आसमान छूने की अनुमति दी थी? एक कागज या एक किताब शायद?