2013-01-10 26 views
12

बस यह सुनिश्चित करने के लिए: क्या एलएलवीएम बिटकोड क्रॉस-प्लेटफ़ॉर्म है? जिसका मेरा मतलब है, क्या जेनरेट की गई आईआर (".bc") फ़ाइल को अलग-अलग प्लेटफार्मों पर विसर्जित और व्याख्या/JITed किया जा सकता है?एलएलवीएम बिटकोड क्रॉस-प्लेटफार्म

यदि हां, तो क्लैंग सी ++ को प्लेटफॉर्म आजादी कोड में कैसे परिवर्तित करता है? सी ++ भाषा में ही, इसके लक्षित प्लेटफ़ॉर्म को निर्धारित करने के लिए प्रीप्रोसेसर का उपयोग वास्तव में संकलित होने से पहले किया जाता है।

+0

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

+0

मुझे लगता है कि http://llvm.org/docs/LangRef.html पूरी तरह से प्लेटफार्म स्वतंत्र होगा। वास्तव में 'बाकी प्रणाली का उपयोग करके हार्ट टाइम' का क्या मतलब है? – Tim

+1

@Tim - क्या कोड किसी भी ओएस कॉल का उपयोग करेगा? वे कितने पोर्टेबल हैं? –

उत्तर

17

एलएलवीएम आईआर क्रॉस-प्लेटफ़ॉर्म हो सकता है, जिसमें स्पष्ट अपवाद दूसरों के सूचीबद्ध हैं। हालांकि, इसका मतलब यह नहीं है कि क्लैंग क्रॉस-प्लेटफ़ॉर्म कोड उत्पन्न करता है। जैसा कि आप ध्यान देते हैं, प्रीप्रोसेसर लगभग सार्वभौमिक रूप से कोड के हिस्सों को सी/सी ++ कंपाइलर तक प्लेटफ़ॉर्म के आधार पर पास करने के लिए उपयोग किया जाता है। यहां तक ​​कि जब यह उपयोगकर्ता कोड में नहीं किया जाता है, तब भी कई सिस्टम शीर्षकों में प्लेटफॉर्म-विशिष्ट, जैसे typedef एस शामिल हैं। उदाहरण के लिए, यदि आप size_t का उपयोग करके प्लेटफार्म पर size_t पर 3212 है, तो एलएलवीएम आईआर अब इसके लिए i32 का उपयोग करता है, और नरक में कोई रास्ता नहीं है, आप इसे ठीक करने के लिए अभियंता को उलट सकते हैं।

Google की Portable Native Client प्रोजेक्ट (लिंक के लिए धन्यवाद @ विल्ग्लिन), अगर मैं इसे सही ढंग से समझता हूं, तो सभी लक्षित प्लेटफार्मों के लिए एबीआई को ठीक करके पोर्टेबिलिटी प्राप्त करता है। तो इस अर्थ में, यह उपर्युक्त मुद्दों को हल नहीं करता है: एलएलवीएम आईआर एक अलग एबीआई के साथ मंच पर पोर्टेबल नहीं है। एकमात्र कारण यह अधिक पोर्टेबल है कि ग्राहक एक परत प्रदान करते हैं जो पीएनएसीएल एबीआई से वास्तविक एबीआई से मेल खाता है। दूसरे शब्दों में, पीएनएसीएल कोड कई प्लेटफॉर्म पर पोर्टेबल नहीं है, "पीएनएसीएल वीएम" है।

तो, नीचे पंक्ति: यदि आप बहुत सावधान हैं, तो आप कई प्लेटफार्मों में एलएलवीएम आईआर का उपयोग कर सकते हैं, लेकिन एबीआई मतभेदों पर सार के लिए महत्वपूर्ण अतिरिक्त काम (जो क्लैंग नहीं करता) के बिना नहीं।

9

आईआर फ़ाइल को देखते हुए, क्या मुझे यकीन है कि यह मेरे लक्ष्य को संकलित कर सकता है?

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

क्या मैं एक आईआर फ़ाइल उत्पन्न कर सकता हूं जो सभी लक्ष्यों पर संकलन करने की गारंटी है?

मुझे नहीं पता, लेकिन मुझे विश्वास है कि आप कर सकते हैं, विशेष रूप से यदि आप इनलाइन असेंबली जैसी चीजों को निर्दिष्ट करने से बचते हैं, सम्मेलन बुलाते हैं, आवश्यक/पसंदीदा एबीआई प्रकार के लिए इत्यादि से बचते हैं। यह संकलक प्रदर्शन करने वाले अनुकूलन को प्रभावित कर सकता है, हालांकि ।