LLVM वास्तव में क्या है?


464

मैं हर समय एलएलवीएम के बारे में सुनता रहता हूं। यह पर्ल में है, तो यह हास्केल में है, तो कोई इसे किसी अन्य भाषा में उपयोग करता है? यह क्या है?


45
एक किताब में एक अच्छा अध्याय है जो यहाँ पर सब कुछ समझा रहा है: www.aosabook.org/en/llvm.html
डेविड डी ई ई फ्रीटास

जवाबों:


369

एलएलवीएम एक पुस्तकालय है जिसका उपयोग मध्यवर्ती और / या बाइनरी मशीन कोड के निर्माण, अनुकूलन और उत्पादन के लिए किया जाता है।

LLVM का उपयोग एक कंपाइलर फ्रेमवर्क के रूप में किया जा सकता है, जहाँ आप "फ्रंट एंड" (पार्सर और लेक्सर) और "बैक एंड" (कोड जो LLVM के प्रतिनिधित्व को वास्तविक मशीन कोड में परिवर्तित करते हैं) प्रदान करते हैं।

LLVM एक JIT कंपाइलर के रूप में भी कार्य कर सकता है - इसमें x86 / x86_64 और PPC / PPC64 असेंबली जेनरेशन के लिए सपोर्ट कोड है जो फास्ट कोड ऑप्टिमाइजेशन के लिए तैयार है।

यदि आप रुचि रखते हैं, तो आप LLVM के मशीन कोड के साथ खेल सकते हैं जो उनके डेमो पेज में C या C ++ कोड से उत्पन्न होता है , लेकिन डेमो पेज वर्तमान में वर्ष 2013 से अक्षम है।


39
यदि आप इसके साथ खेलना चाहते हैं, तो इस अद्भुत लेख को देखें: gnuu.org/2009/09/18/writing-your-own-toy-compiler
LiraNuna

29
उत्तर में दी गई लिंक कहती है "एलएलवीएम डेमो पेज वर्तमान में अक्षम है।"
EngrStudent 14

5
ellcc.org/demo/index.cgi , एलएलवीएम के माध्यम से सी / सी ++ संकलन के साथ खेलने के लिए एक और तरीका है, जिसमें मध्यवर्ती कोड
टॉम

1
क्या आप इसका वास्तविक उदाहरण दे सकते हैं?
Migrate2Lazarus

112

LLVM का एक अच्छा सारांश यह है:

यहाँ छवि विवरण दर्ज करें

सीमांत पर आपके पास पर्ल, और कई अन्य उच्च स्तरीय भाषाएं हैं। बैकएंड में, आपके पास मूल कोड है जो सीधे मशीन पर चलता है।

केंद्र में आपका मध्यवर्ती कोड प्रतिनिधित्व है। यदि इस एलएलवीएम आईआर प्रारूप में हर उच्च स्तरीय भाषा का प्रतिनिधित्व किया जा सकता है, तो इस आईआर पर आधारित विश्लेषण उपकरण आसानी से पुन: उपयोग किए जा सकते हैं - यही मूल तर्क है।


39
तस्वीर एक हजार शब्दों के लायक है
atch

3
तो ऐसा लगता है कि एलएलवीएम कंपाइलर डिजाइनरों के लिए उपयोगी है। एक प्रोग्रामर को परवाह करना चाहिए कि क्या वह एक मानक संकलक या एलएलवीएम पर आधारित एक के साथ संकलित करता है, इसके अलावा स्रोत कोड से स्वतंत्र रूप से उत्पन्न कोड का विश्लेषण करता है?
जिनीवी

4
अगर आप LLVM को इसके IR के साथ संकलित कर सकते हैं, तो IR का विश्लेषण करने के लिए आपके लिए बहुत सारे उपकरण खोले जा सकते हैं। लेकिन अगर आपका टूल केवल देशी बायनेरिज़ (उदाहरण के लिए x86) का विश्लेषण करने में सक्षम है, तो क्या यह एलएलवीएम उत्पन्न बायनेरिज़ या जीसीसी-जनित बायनेरिज़, या इंटेल-कंपाइलर जेनरेट किया गया है, कोई अंतर नहीं है।
पीटर तेह

73

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

अधिक विवरण के लिए इस पढ़ें
इसके अलावा बाहर की जाँच Unladen निगल


13
.. तो डॉक्स क्या कहना चाह रहे हैं; जबकि एलएलवीएम लो लेवल वर्चुअल मशीन के लिए एक परिचित है , परियोजना को केवल एलएलवीएम नाम दिया गया है , न कि पूरी तरह से वर्तनी वाले शब्द।
जोकेम कूइजपर्स

2
पहले इसका संक्षिप्त नाम था लेकिन बाद में en.wikipedia.org/wiki/LLVM
VVB

2
टिप्पणियों को संक्षेप में बताने के लिए। "लो लेवल वर्चुअल मशीन (एलएलवीएम)" कुछ इस तरह होना चाहिए "एलएलवीएम (जिसका अर्थ था" लो लेवल वर्चुअल मशीन "पहले की परियोजनाओं के जीवनकाल में)"
ssokolow

52

के अनुसार 'LLVM कोर पुस्तकालय के साथ शुरूआत' पुस्तक (ग):

वास्तव में, एलएलवीएम नाम निम्नलिखित में से किसी को संदर्भित कर सकता है:

  • एलएलवीएम परियोजना / बुनियादी ढांचा: यह कई परियोजनाओं के लिए एक छाता है, जो एक साथ, एक पूर्ण संकलक बनाते हैं: फ्रंटेंड, बैकएंड, ऑप्टिमाइज़र, कोडांतरक, लिंकर्स, libc ++, कंपाइलर-आरटी, और एक जेआईटी इंजन। शब्द "एलएलवीएम" का यह अर्थ है, उदाहरण के लिए, निम्नलिखित वाक्य में: "एलएलवीएम में कई परियोजनाएं शामिल हैं"।

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

  • एलएलवीएम पुस्तकालय: यह एलएलवीएम बुनियादी ढांचे का पुन: प्रयोज्य कोड हिस्सा है। उदाहरण के लिए, एलएलवीएम का वाक्य में यह अर्थ है: "मेरी परियोजना अपने जस्ट-इन-टाइम संकलन ढांचे के माध्यम से कोड उत्पन्न करने के लिए एलएलवीएम का उपयोग करती है"।

  • एलएलवीएम कोर: मध्यवर्ती भाषा के स्तर पर होने वाले अनुकूलन और बैकएंड एल्गोरिदम एलएलवीएम कोर बनाते हैं जहां परियोजना शुरू हुई थी। एलएलवीएम का निम्नलिखित अर्थ में यह अर्थ है: "एलएलवीएम और क्लैंग दो अलग-अलग परियोजनाएं हैं"।

  • LLVM IR: यह LLVM संकलक मध्यवर्ती प्रतिनिधित्व है। LLVM का यह अर्थ है जब वाक्यों में उपयोग किया जाता है जैसे कि "मैंने एक ऐसा फ्रंट बनाया जो अपनी भाषा को LLVM में अनुवाद करता है"।


35

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


6
तो LLVM लाइब्रेरी है, और क्लैंग कंपाइलर है?
अब्दुल

11
Clang LLVM का C / C ++ फ्रंटेंड कंपाइलर है। यह सी कोड को एलएलवीएम बिटकोड में परिवर्तित करता है, जिसका बैकएंड कंपाइलर द्वारा कुछ असेंबली भाषा में अनुवाद किया जाता है।
बोरिस मुल्डर

6

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

महत्वपूर्ण रूप से एलएलवीएम आपको अपने स्वयं के पास लिखने के लिए पुस्तकालयों के साथ प्रदान करता है। उदाहरण के लिए यदि आपको कुछ तर्कों पर एक सीमा जाँच जोड़ने की आवश्यकता होती है जो किसी प्रोग्राम के कुछ कार्यों में पारित हो जाते हैं, तो एक साधारण एलएलवीएम पास लिखना पर्याप्त होगा।

अपना पास लिखने के बारे में अधिक जानकारी के लिए, इस http://llvm.org/docs/WritingAnLLVMPass.html की जाँच करें

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