12

मैं एक शोध परियोजना की तैयारी में सुविधाओं का एक सर्वेक्षण कर रहा हूं।भाषाएं और वीएम: विशेषताएं जो अनुकूलित करने के लिए कठिन हैं और

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

शीर्ष सुविधाओं और मेरे सिद्धांतों (मेरे सिद्धांतों के कुछ अपरीक्षित हैं और सोचा प्रयोगों के आधार पर कर रहे हैं) अनुकूलन करने के लिए:

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

2) प्रकार morphing/वेरिएंट (उर्फ मूल्य आधारित टाइपिंग के रूप में आधारित चर) पारंपरिक अनुकूलन में शायद केवल जब तुम अगर someting के प्रकार के एक बुनियादी ब्लॉक में बदल सकते हैं पता नहीं है लागू नहीं किया जा सकता है करने का विरोध किया। बहु-विधियों के साथ, इनलाइनिंग सावधानी से किया जाना चाहिए यदि संभवतः, और शायद केवल कैली के आकार की दी गई सीमा के लिए। अर्थात। सरल संपत्ति लाने (गेटर्स/सेटर्स) को रेखांकित करने पर विचार करना आसान है, लेकिन जटिल तरीकों को रेखांकित करने से कोड ब्लोट हो सकता है। दूसरा मुद्दा यह है कि मैं सिर्फ एक रजिस्टर के लिए एक संस्करण नहीं दे सकता हूं और इसे मूल निर्देशों के लिए जेआईटी नहीं कर सकता क्योंकि मुझे टाइप की जानकारी लेनी है, या प्रत्येक परिवर्तनीय को 2 रजिस्टरों की आवश्यकता है। आईए -32 पर यह असुविधाजनक है, भले ही यह असुविधाजनक हो x64 के अतिरिक्त रजिस्टरों के साथ सुधार हुआ। यह शायद गतिशील भाषाओं की मेरी पसंदीदा विशेषता है, क्योंकि यह प्रोग्रामर के परिप्रेक्ष्य से इतनी सारी चीजों को सरल बनाता है।

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

4) पॉइंटर अंकगणित और मास्क पॉइंटर्स (पूर्णांक में भंडारण आदि) की क्षमता में इसे फेंकना पड़ा, लेकिन मैं वास्तव में इसके बिना आसानी से रह सकता था।

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

मैं आपके उत्तरों का स्वागत करता हूं।

+0

शायद सीडब्ल्यू होना चाहिए? –

उत्तर

5

टिप्पणियों के एक जोड़े:

  • गतिशील प्रेषण के साथ सभी भाषाओं, यहां तक ​​कि एक ही लक्ष्य पर आधारित है, बहुत कुशलता से लागू करने के लिए कठिन लग रहे हैं। स्वयं के रन-टाइम ऑप्टिमाइज़ेशन (या हाल ही में, स्पाइडरमोन्की के साथ जावास्क्रिप्ट) में चलाए गए सभी प्रयासों को देखें।

  • को सीमित न करें को अनदेखा न करें। जूरी अभी भी बाहर है, लेकिन क्लासिक अनियमित निरंतरता से अनुकूलित करने के लिए वे काफी आसान हैं। Gasbichler और Sperber द्वारा कागज पढ़ें।

1

यह मेरा पेट लग रहा है कि बाईटकोड आभासी मशीनों और JIT कोर शायद हमेशा इस वजह से कुछ भाषाओं के लिए उचित नहीं है।

आयरनपीथन को यह साबित करने के लिए लिखा नहीं गया कि वर्चुअल मशीन भाषा (पायथन) के मूल कार्यान्वयन के साथ ही नहीं कर सका। और फिर आयरनपीथन के लेखक को एक झटका लगा जब उन्हें पता चला कि आयरनपीथन ने बाइटकोड वीएम पर एक गतिशील भाषा के लिए वास्तव में अच्छा प्रदर्शन किया था?

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

मुझे लगता है कि जूरी अभी भी इस पर बाहर है। इसे किसी भी तरह से कॉल करना मुश्किल है। उस भाषा का चयन करें जो नौकरी के लिए उपयुक्त है ...

+0

"वह भाषा चुनें जो नौकरी के लिए उपयुक्त है ..." - धन्यवाद, मैं सहमत हूं, लेकिन यह मेरे प्रश्न का लक्ष्य नहीं है। यह विशेष रूप से अनुकूलन और विशेषताओं के बारे में है। आयरनपीथन के लिए, मुझे आपके प्रश्न का उत्तर नहीं पता है, लेकिन मुझे पढ़ने में दिलचस्पी है यदि आपके पास संदर्भ हैं जो मैं कर सकता हूं। – codenheim

+0

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

+0

यह प्रश्न इस बारे में नहीं है कि कोई भाषा उपयुक्त है या नहीं, इसलिए कृपया इसे विषय पर रखें। मैं एक भाषा और वीएम शोधकर्ता/कार्यान्वयनकर्ता हूं और मैं सुविधाओं के विशिष्ट अनुकूलन के बारे में बात कर रहा हूं और आप "नौकरी के लिए सबसे अच्छा टूल चुनना" बोल रहे हैं। मैं नौकरी के लिए उपकरण लिखता हूं। अब, आयरनपीथन के लिए, यह एक उपयोगी उदाहरण है, लेकिन मैंने सूचीबद्ध कुछ विशेषताएं पाइथन में मौजूद नहीं हैं। पायथन में वास्तविक बंद नहीं होते हैं (चर केवल पढ़े जाते हैं) या प्रथम श्रेणी की निरंतरता (सीपीएस एक ही बात नहीं है)। आयरनपीथन साबित करता है कि पाइथन को सीएलआर पर अच्छी तरह से लागू किया जा सकता है, न कि सभी भाषाओं को कर सकते हैं। – codenheim