एलएलवीएम निम्न स्तर किस तरीके से है?


12

किस तरह (ओं) में एलएलवीएम (निम्न स्तर की वर्चुअल मशीन) निम्न स्तर है? (लेखन के समय, मुझे इसके वेब साइट पर संक्षिप्त नाम "LLVM" का विस्तार नहीं मिला, लेकिन विकिपीडिया पर ।)

क्या इसे "निम्न स्तर" कहा जाता है जो इसे (एक कंपाइलर इन्फ्रास्ट्रक्चर) के लिए डिज़ाइन किया गया है या क्योंकि यह अन्य उपकरणों के साथ "निचले स्तर" पर काम कर रहा है?

इस तरह के "चित्रण" के रूप में, जेवीएम और सीएलआर की तुलना में एलएलवीएम निम्न-स्तर है , या यह केवल "निचले स्तर" के उपयोग के लिए डिज़ाइन किया गया है ?

जवाबों:


16

LLVM JVM और CLR जैसे विशिष्ट VMs से निम्न स्तर है। उदाहरण के लिए, जबकि इसके पास कूड़ा उठाने वाले के लिए हुक है , यह स्वयं कचरा संग्राहक प्रदान नहीं करता है।

इसी तरह, जेवीएम में एक अंतर्निहित जेआईटी संकलक है (वास्तव में प्राचीन संस्करणों को छोड़कर)। LLVM के पास LLVM IR के लिए कुछ JIT कंपाइलर हैं, लेकिन यह अभी भी डेवलपर को एक साथ चीजों को हुक करने और वास्तव में JIT कोड के लिए है।

जब JVM एक अनसुलझे बाहरी का सामना करना पड़ता है, यह बाहर चला जाता है और यह पूरा करने के सही वर्ग पाता है, और फाइल सिस्टम में सीधे और .jar फाइलों में .class फ़ाइलों के लिए देखने के लिए कैसे जानता है 1 । एलएलवीएम के जेआईटी कंपाइलर्स में हुक होते हैं जहां आप तय कर सकते हैं कि इस तरह की चीजों को कैसे संभाला जाए। आपकी अपेक्षा से कम के रूप में, कुछ लोगों को कुछ डिफ़ॉल्ट संस्करण में लिखा है, तो यह कर सकते हैं JVM रूप में एक ही आदेश पर मोटे तौर पर काम कर सकते हैं - लेकिन आप उन लोगों को भी ध्यान न दें और कुछ अलग करना है, तो आप का चयन करने के लिए स्वतंत्र हैं।

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


1 तकनीकी रूप से, यह सब जेवीएम में उचित तरीके से नहीं बनाया गया है। यह निर्दिष्ट करता है कि आमतौर पर जेवीएम के हिस्से के रूप में प्राइमर्डियल क्लास लोडर को क्या कहा जाता है, और फिर java.util.ClassLoader में निर्दिष्ट उपयोगकर्ता वर्ग लोडर हैं जो अन्य चीजों को संभालते हैं। कुछ वर्ग लोडर डिफ़ॉल्ट रूप से शामिल होते हैं, और यदि आप बुरी तरह से पर्याप्त होना चाहते हैं, तो आप अपने स्वयं को परिभाषित करके उन्हें पूरक कर सकते हैं।


12

यह निम्न स्तर का है क्योंकि इसे इतनी मौजूदा या भविष्य की आभासी मशीनों (JVM) द्वारा डिज़ाइन किया गया है जो इसे उनके कार्यान्वयन के मूल के रूप में उपयोग कर सकते हैं।

इसे इस तरह देखें: जावा और पायथन की आभासी मशीनें बहुत पोर्टेबल हैं क्योंकि वे मानक सी में लिखे गए हैं, और अपने स्वयं के पुस्तकालयों पर बहुत अधिक भरोसा करते हैं। एलएलवीएम का इरादा बुनियादी ढांचा प्रदान करना है ताकि किसी भी वर्चुअल मशीन को एक प्लेटफॉर्म पर पोर्ट करना आसान हो जो पहले से ही एलएलवीएम का समर्थन करता है।

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

फिर एलएलवीएम, निचले स्तर पर होने के कारण, अलग-अलग ओएस और हार्डवेयर आर्किटेक्चर को पोर्ट करना आसान होना चाहिए।

बड़ी बचत होती है अगर भाषा कार्यान्वयनकर्ता एकल, आसान-से-पोर्ट पोर्ट-लेवल प्लेटफ़ॉर्म पर लिख सकते हैं। सबसे अच्छी तरह से जानी जाने वाली VMs उनकी सेवा और ऑपरेटिंग सिस्टम की भाषा के बीच में हैं, और उन्हें अपने स्वयं के मध्यवर्ती अभ्यावेदन और JITC को लागू करना होगा।


5

एलएलवीएम नाम का "निम्न स्तर" वाला हिस्सा उपयोग किए गए आभासी निर्देश के स्तर को संदर्भित करता है। एलएलवीएम का उपयोग करने वाली मध्यवर्ती भाषा (आईआर) मशीन कोड के स्तर के करीब है, हालांकि यह वास्तुकला अज्ञेय और सामान्य है।

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


3

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

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