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