मेटा-परिपत्र दुभाषियों, आभासी मशीनों और बढ़ते प्रदर्शन के बीच क्या संबंध है?


12

मैंने वेब पर मेटा-परिपत्र दुभाषियों के बारे में पढ़ा है (SICP सहित) और मैंने कुछ कार्यान्वयनों (जैसे PyPy और Narcissus) के कोड में देखा है।

मैंने दो भाषाओं के बारे में काफी कुछ पढ़ा है, जो मेटासेकुलर मूल्यांकन, लिस्प और स्मॉलटाक के महान उपयोग किए हैं। जहां तक ​​मुझे समझ में आया कि लिस्प पहला सेल्फ-होस्टिंग कंपाइलर था और स्मॉलटाक का पहला "सच" जेआईटी कार्यान्वयन था।

एक बात जो मुझे पूरी तरह से समझ में नहीं आई है, वह यह है कि उन दुभाषियों / संकलक इतने अच्छे प्रदर्शन को कैसे प्राप्त कर सकते हैं या, दूसरे शब्दों में, PyPy CPython से अधिक तेज़ क्यों है? क्या यह प्रतिबिंब के कारण है?

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

मैं यह पूछता हूं क्योंकि व्याख्या की गई और संकलित दोनों भाषाएं अब एक लक्ष्य (LLVM, तोता, YARV, CPython) और JVM और CLR जैसे पारंपरिक VMs ने प्रदर्शन में अविश्वसनीय वृद्धि प्राप्त की है। मुझे बताया गया है कि यह जेआईटी के बारे में है, लेकिन जहां तक ​​मुझे पता है कि जेआईटी कोई नई बात नहीं है क्योंकि स्मॉलटाक और सन की खुद की जावा से पहले यह स्वयं कर रहा है। मुझे याद नहीं है कि वीएम अतीत में विशेष रूप से अच्छा प्रदर्शन करते थे, जेवीएम और .NET के बाहर बहुत सारे गैर-शैक्षणिक व्यक्ति नहीं थे और उनका प्रदर्शन निश्चित रूप से उतना अच्छा नहीं था जितना कि अब है (काश मैं इस दावे का स्रोत बन पाता लेकिन व्यक्तिगत अनुभव से बात)।

फिर अचानक 2000 के दशक के अंत में कुछ बदल गया और बहुत सारी VMs स्थापित भाषाओं के लिए भी पॉप अप करने लगीं, और बहुत अच्छे प्रदर्शन के साथ। क्या JIT कार्यान्वयन के बारे में कुछ पता चला था जिसने हर आधुनिक वीएम को प्रदर्शन में आसमान छूने की अनुमति दी थी? एक कागज या एक किताब शायद?


3
पैसे। वह पैसा जो C ++ और फोरट्रान में डाला जाता था, अब हॉटस्पॉट, CLR, मोनो, V8, नाइट्रो, स्पाइडरमोंकी, आदि में डाला जाता है
Jörg W Mittag

मैं केवल अनुमान लगा सकता हूं, लेकिन मुझे लगता है कि यह केवल समय के साथ सुधार है, जैसे कि यहां बताया गया है joelonsoftware.com/articles/fog000000001717.html
Doc Brown


1
@ गोमी यह कार्यान्वित भाषा के समान कार्यान्वयन भाषा के समान नहीं है। आरपीथॉन में जावास्क्रिप्ट, लिस्प, प्रोलॉग, स्मॉलटॉक और रूबी दुभाषियों को लिखा गया है और उन्हें बिल्कुल वही उपहार मिलते हैं जो PyPy प्रदान करता है। केवल यही कारण है कि आरथॉन अजगर पर आधारित है, यह अजगर उत्साही लोगों के झुंड द्वारा बनाया गया था। Pythy को तेज बनाने वाले RPython की विशेषताओं का Python से कोई लेना-देना नहीं है: ऑटोमैटिक JIT कंपाइलर जेनरेशन, कचरा बीनने वाले, इत्यादि - और हाँ, अधिकतर उस सिद्धांत में अन्य भाषाओं का उपयोग किया जा सकता है। हालांकि आपको एक नया संकलक बनाना होगा।

4
-1 क्योंकि आपको लगता है कि यहाँ कम से कम 3 अलग-अलग प्रश्न हैं: (क) मेटा-सर्कुलर कार्यान्वयन इतने अच्छे क्यों हैं? (बी) वीएम प्रकार की जानकारी के कारण कुशल हैं, और क्या आत्मनिरीक्षण प्रदर्शन के लिए फायदेमंद है? (c) 2000 के दशक के उत्तरार्ध में VM की लोकप्रियता कैसे बढ़ी और कैसे वे अचानक अच्छे प्रदर्शन के साथ आए? मुझे लगता है कि उन सवालों को अलग से पूछना बेहतर है।
ओक

जवाबों:


1

3 में से 2: "मेटा-सर्कुलर" और "हाई-परफॉर्मेंस" भाषा के रनटाइम के बीच कोई संबंध नहीं है। मेटा-सर्कुलर रनटाइम जो कि उच्च प्रदर्शन को प्राप्त करते हैं, वे जेआईटी-संकलन द्वारा मूल कोड और मूल कोड को चला रहे हैं। ऐसा कोई कारण नहीं है कि आपके हाय-परफेक्ट पायथन रनटाइम को पायथन में लिखा जाए, या लिस्प में लिस्प आदि। लेकिन अगर आपको लगता है कि आपकी भाषा दूसरों की तुलना में अधिक शक्तिशाली, अभिव्यंजक आदि है, तो इसे लिखने के लिए उपयोग क्यों नहीं किया जाता है अपने स्वयं के क्रम? या अगर आपको नहीं लगता है कि आपकी भाषा किसी भी तरह "दूसरों" से बेहतर है, तो आप इसे लागू करने के लिए क्यों परेशान हो रहे हैं?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.