2012-04-22 11 views
8

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

उत्तर

7

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

मेरी राय में, स्रोत कोड और आईआरबी के लिए आईआर के बीच घनिष्ठ संबंध रखना भी आसान है।

प्लस, आपको आईआर आपके फ्रंट एंड एमिट्स का विश्लेषण और प्रक्रिया करने के लिए सभी अच्छे एलएलवीएम कमांड लाइन टूल्स मिलते हैं।

+1

आईआर टाइप किया गया आपका क्या मतलब है? सी टाइप भी नहीं है? – Dan

+3

दाएं, सी टाइप किया गया है। लेकिन जब तक आप सी कोड संकलित करने का प्रयास नहीं करते हैं तब तक आपको त्रुटि का संकेत नहीं मिलता है। एलएलवीएम आईआर के साथ जब आप आईआर उत्पन्न करते हैं तो आपको त्रुटि का संकेत मिलता है। डीबग करना बहुत आसान है। –

0

आर्किटेक्चर और ओएस जिनके लिए कोई CLANG स्पष्ट रूप से नहीं है, या जिसके लिए यह एक प्रयोगात्मक स्थिति में है।

सी अधिक व्यापक रूप से स्वीकार्य है, लेकिन एलएलवीएम आईआर आपको एलएलवीएम इंजन को खिलाने की अनुमति देता है। आईआर के सभी मार्ग बराबर नहीं हैं।

1

मुझे शक है जब सी

+0

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

2

LLVM फायदे को लक्षित अगर आप अपनी भाषा के लिए उचित डिबगिंग समर्थन को लागू कर सकते हैं:

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

LLVM कमियां:

  1. कोड पोर्टेबल नहीं है, आप थोड़ा अपने लक्ष्य के आधार पर यह बदलना होगा। एलएलवीएम का कुछ पोर्टेबल सबसेट है, लेकिन यह अभी भी एक डोडी अभ्यास है।
  2. सी ++ पुस्तकालयों पर रनटाइम निर्भरता, कुछ समस्या हो सकती है।
+0

आप भूल गए: यदि आप सी इंटरऑप चाहते हैं (कौन सी भाषा नहीं है?) आपको उन सभी ग़लत सी एबीआई को स्वयं कोड करना होगा क्योंकि llvm खुद ही ऐसा नहीं करता है (यह उस काम को 50/50 को क्लैंग के साथ विभाजित करता है) – cap

संबंधित मुद्दे