2008-10-05 20 views
45

क्या किसी को LLVM, llvm-gcc, या Clang के साथ अनुभव है?एलएलवीएम के सबसे बड़े लाभ क्या हैं?

llvm के पीछे पूरा विचार मेरे लिए बहुत ही दिलचस्प लगता है और मुझे यह देखने में दिलचस्पी है कि यह कैसा प्रदर्शन करता है। यदि उपकरण उत्पादन के लिए तैयार नहीं हैं तो मैं उपकरण को आजमाने में पूरी तरह से डंप नहीं करना चाहता हूं।

यदि आपके पास टूल के साथ अनुभव है, तो आप उनके बारे में क्या सोचते हैं? आपको किस बड़ी सीमा का सामना करना पड़ा है? सबसे बड़ा लाभ क्या हैं?

बहुत धन्यवाद!

+1

मैंने निम्नलिखित दस्तावेज़ लिखा है जो एलएलवीएम के लाभों पर चर्चा करता है। http://llvm4eclipsecdt.googlecode.com/files/Benefits%20of%20the%20LLVM%20compiler%20infrastructure.pdf –

उत्तर

21

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

मैं अपनी सीमाओं, स्थिरता, प्रदर्शन और इसी तरह की किसी भी तरह की उपयोगी राय प्रदान करने में सक्षम होने के लिए पर्याप्त गहराई से नहीं गया हूं। मैं समझता हूं कि यह सभी मायने रखता है लेकिन यह पूरी तरह से सुनवाई है।

39

मैं एलएलवीएम के बारे में पर्याप्त अच्छी बातें नहीं कह सकता। मैंने देखा है कि अन्य कंपाइलर परियोजनाओं की तुलना में काम करना इतना आसान है। मैं एक कंपाइलर लड़का नहीं हूं, लेकिन जब मैं एलएलवीएम या क्लैंग की कुछ सीमा से निराश हो जाता हूं तो आमतौर पर गोता लगाने और इसे बदलने में काफी आसान होता है।

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

25

मैं कई महीनों के लिए एलएलवीएम चालू और बंद कर रहा हूं। मैंने OCaml प्रोग्रामिंग भाषा से एलएलवीएम के उपयोग को कवर करने वाले दो OCaml Journal लेख लिखे हैं। यह विशेष रूप से दिलचस्प है क्योंकि ओकैमल भाषा कंपेलरों को लिखने के लिए आदर्श है और इसमें पार्सिंग के लिए शक्तिशाली और परिपक्व औजारों और पुस्तकालयों का भरपूर धन है।

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

मेरे पास एलएलवीएम के साथ केवल दो पकड़ हैं। सबसे पहले, यह अपवाद बढ़ाने के बजाए कुछ भी गलत होने पर abort() का उपयोग करता है। यह अपने लेखकों द्वारा एक जानबूझकर डिजाइन निर्णय था जो एलएलवीएम से अपवादों के सभी उपयोगों को हटाने का प्रयास कर रहे हैं, लेकिन एलएलवीएम का उपयोग करने वाले कंपाइलर को डीबग करने का प्रयास करते समय ओकैम से बैकट्रैक प्राप्त करना असंभव हो जाता है: आपका प्रोग्राम सिर्फ एलएलवीएम से टेक्स्ट स्पष्टीकरण के साथ मर जाता है लेकिन आपके स्रोत में त्रुटि कहां से कोई सुराग नहीं है। दूसरा, एलएलवीएम की संकलित लाइब्रेरी राक्षसी रूप से बड़ी (20 एमबी) है। मुझे लगता है कि यह सी ++ द्वारा किए गए ब्लोट के कारण है, लेकिन यह संकलन को धीमा कर देता है।

संपादित करें: एलएलवीएम पर मेरा काम उच्च प्रदर्शन वाले उच्च स्तरीय कचरे से एकत्रित वर्चुअल मशीन के निर्माण में समाप्त हुआ। मुफ्त डाउनलोड here और संबंधित benchmarks (वाह!) देखें। @ एलेक्स: मैं उस बीएफ कंपाइलर को आपके लिए कहीं भी प्राप्त करूंगा।

+2

क्या आप बीएफ कंपाइलर पोस्ट कर सकते हैं? मैंने एक बीएफ-> सी अनुवादक लिखा, जो मुझे लगता है, जैसा कि आप एक ही पास में प्राप्त कर सकते हैं उतना अच्छा है, और वास्तव में बड़े कार्यक्रमों में llvm-gcc बहुत बुरी तरह से गिरता है। हालांकि, वे थोड़े अनुचित हैं। –

2

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

नवीनतम संस्करण आधिकारिक ग्रहण अद्यतन साइट के माध्यम से उपलब्ध है: http://download.eclipse.org/releases/mars

यह प्रोग्रामिंग भाषाओं में है और नाम दिया गया है "C/C++ LLVM परिवार संकलक बिल्ड समर्थन"।